@nsshunt/stsappframework 3.1.118 → 3.1.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ipcMessageHandler.js +171 -0
- package/dist/ipcMessageHandler.js.map +1 -0
- package/dist/ipcMessageManager.js +15 -5
- package/dist/ipcMessageManager.js.map +1 -1
- package/dist/ipcMessageProcessorPrimary.js +1 -0
- package/dist/ipcMessageProcessorPrimary.js.map +1 -1
- package/dist/ipcMessageProcessorWorker.js +1 -0
- package/dist/ipcMessageProcessorWorker.js.map +1 -1
- package/dist/redisMessageHandler.js +212 -0
- package/dist/redisMessageHandler.js.map +1 -0
- package/dist/redisMessageHandler.test.js +127 -0
- package/dist/redisMessageHandler.test.js.map +1 -0
- package/dist/testing/app.js +112 -5
- package/dist/testing/app.js.map +1 -1
- package/package.json +1 -1
- package/runtest2.sh +1 -1
- package/src/commonTypes.ts +1 -0
- package/src/ipcMessageHandler.ts +181 -0
- package/src/ipcMessageManager.ts +19 -9
- package/src/ipcMessageProcessorPrimary.ts +1 -0
- package/src/ipcMessageProcessorWorker.ts +1 -0
- package/src/redisMessageHandler.test.ts +155 -0
- package/src/redisMessageHandler.ts +256 -0
- package/src/testing/app.ts +132 -8
- package/types/commonTypes.d.ts +1 -0
- package/types/commonTypes.d.ts.map +1 -1
- package/types/ipcMessageHandler.d.ts +24 -0
- package/types/ipcMessageHandler.d.ts.map +1 -0
- package/types/ipcMessageManager.d.ts +4 -3
- package/types/ipcMessageManager.d.ts.map +1 -1
- package/types/ipcMessageProcessorPrimary.d.ts.map +1 -1
- package/types/ipcMessageProcessorWorker.d.ts.map +1 -1
- package/types/redisMessageHandler.d.ts +35 -0
- package/types/redisMessageHandler.d.ts.map +1 -0
- package/types/redisMessageHandler.test.d.ts +2 -0
- package/types/redisMessageHandler.test.d.ts.map +1 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IPCMessageHandler = void 0;
|
|
7
|
+
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF */ // --> OFF
|
|
8
|
+
const tiny_emitter_1 = require("tiny-emitter");
|
|
9
|
+
const node_cluster_1 = __importDefault(require("node:cluster"));
|
|
10
|
+
const stsutils_1 = require("@nsshunt/stsutils");
|
|
11
|
+
const ipcMessageManager_1 = require("./ipcMessageManager");
|
|
12
|
+
class IPCMessageHandler extends tiny_emitter_1.TinyEmitter {
|
|
13
|
+
#ipcMessageManager = null;
|
|
14
|
+
#options;
|
|
15
|
+
#worker = null;
|
|
16
|
+
#events = {};
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super();
|
|
19
|
+
this.#options = options;
|
|
20
|
+
if (node_cluster_1.default.isPrimary) {
|
|
21
|
+
this.SetupPrimary();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.SetupWorker();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
get __events() {
|
|
28
|
+
return this.#events;
|
|
29
|
+
}
|
|
30
|
+
SetupPrimary = () => {
|
|
31
|
+
const ipcMessageManagerOptions = {
|
|
32
|
+
logger: stsutils_1.defaultLogger,
|
|
33
|
+
requestResponseMessageTimeout: 2000,
|
|
34
|
+
namespace: this.#options.namespace,
|
|
35
|
+
role: 'SERVER',
|
|
36
|
+
messageSender: (payload, options) => {
|
|
37
|
+
options.worker.send(payload);
|
|
38
|
+
},
|
|
39
|
+
ProcessRequestMessage: async (payload, options) => {
|
|
40
|
+
return this.#processPayload(payload, options);
|
|
41
|
+
},
|
|
42
|
+
messageReceiverStart: (options) => {
|
|
43
|
+
// Receive a message to process from a worker
|
|
44
|
+
const worker = options.worker;
|
|
45
|
+
worker.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
46
|
+
},
|
|
47
|
+
messageReceiverStop: (options) => {
|
|
48
|
+
const worker = options.worker;
|
|
49
|
+
worker.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.#ipcMessageManager = new ipcMessageManager_1.IPCMessageManager(ipcMessageManagerOptions);
|
|
53
|
+
};
|
|
54
|
+
SetupWorker = () => {
|
|
55
|
+
const ipcMessageManagerOptions = {
|
|
56
|
+
logger: stsutils_1.defaultLogger,
|
|
57
|
+
requestResponseMessageTimeout: this.#options.requestResponseMessageTimeout,
|
|
58
|
+
namespace: this.#options.namespace,
|
|
59
|
+
role: 'CLIENT',
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
61
|
+
messageSender: (payload, options) => {
|
|
62
|
+
// Options not required for sending payloads to the master process
|
|
63
|
+
process.send(payload);
|
|
64
|
+
},
|
|
65
|
+
ProcessRequestMessage: async (payload, options) => {
|
|
66
|
+
return this.#processPayload(payload, options);
|
|
67
|
+
},
|
|
68
|
+
messageReceiverStart: (options) => {
|
|
69
|
+
// Receive a message response back from the primary thread
|
|
70
|
+
process.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
71
|
+
},
|
|
72
|
+
messageReceiverStop: (options) => {
|
|
73
|
+
process.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
this.#ipcMessageManager = new ipcMessageManager_1.IPCMessageManager(ipcMessageManagerOptions);
|
|
77
|
+
};
|
|
78
|
+
SendMessage = async (payload) => {
|
|
79
|
+
if (this.#ipcMessageManager) {
|
|
80
|
+
if (this.#worker) {
|
|
81
|
+
return this.#ipcMessageManager?.SendMessage(payload, { worker: this.#worker });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return this.#ipcMessageManager?.SendMessage(payload, {});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Error state - no #ipcMessageManager set
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
#processPayload = (payload, options) => {
|
|
93
|
+
// check the event name from the collection and invoke that function
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
if (payload.messageType.localeCompare('REQUEST') === 0) {
|
|
96
|
+
if (payload.requestPayload['__eventName']) {
|
|
97
|
+
const eventName = payload.requestPayload['__eventName'];
|
|
98
|
+
if (this.#events[eventName]) {
|
|
99
|
+
try {
|
|
100
|
+
//const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
|
|
101
|
+
this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage) => {
|
|
102
|
+
resolve(responseMessage);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
reject(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
// p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
|
|
114
|
+
on(event, callback, ctx) {
|
|
115
|
+
if (this.#events[event]) {
|
|
116
|
+
// Update the event with the same name
|
|
117
|
+
delete this.#events[event];
|
|
118
|
+
}
|
|
119
|
+
const eventObject = {
|
|
120
|
+
event,
|
|
121
|
+
callback,
|
|
122
|
+
ctx
|
|
123
|
+
};
|
|
124
|
+
this.#events[eventObject.event] = eventObject;
|
|
125
|
+
return this;
|
|
126
|
+
//return super.on(event, callback, ctx);
|
|
127
|
+
}
|
|
128
|
+
off(event, callback) {
|
|
129
|
+
if (this.#events[event]) {
|
|
130
|
+
delete this.#events[event];
|
|
131
|
+
}
|
|
132
|
+
return this;
|
|
133
|
+
//return super.off(event, callback);
|
|
134
|
+
}
|
|
135
|
+
Start = (worker) => {
|
|
136
|
+
if (worker) {
|
|
137
|
+
this.#ipcMessageManager?.Start({ worker });
|
|
138
|
+
this.#worker = worker;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this.#ipcMessageManager?.Start({});
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
Stop = () => {
|
|
145
|
+
if (this.#worker) {
|
|
146
|
+
this.#ipcMessageManager?.Stop({ worker: this.#worker });
|
|
147
|
+
this.#worker = null;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this.#ipcMessageManager?.Stop({});
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
get worker() {
|
|
154
|
+
return this.#worker;
|
|
155
|
+
}
|
|
156
|
+
emit(event, ...args) {
|
|
157
|
+
const sendMessage = async () => {
|
|
158
|
+
const retVal = await this.SendMessage({
|
|
159
|
+
__eventName: event,
|
|
160
|
+
args: args.slice(0, args.length - 1)
|
|
161
|
+
});
|
|
162
|
+
// Invoke the response callback
|
|
163
|
+
args[args.length - 1](retVal);
|
|
164
|
+
};
|
|
165
|
+
sendMessage();
|
|
166
|
+
return this;
|
|
167
|
+
//return super.emit(event, ...args);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.IPCMessageHandler = IPCMessageHandler;
|
|
171
|
+
//# sourceMappingURL=ipcMessageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipcMessageHandler.js","sourceRoot":"","sources":["../src/ipcMessageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,7 @@ class IPCMessageManager {
|
|
|
47
47
|
header: this.#messageHeader,
|
|
48
48
|
messageId,
|
|
49
49
|
senderId: this.#id,
|
|
50
|
+
senderRole: this.#options.role,
|
|
50
51
|
requestPayload: payload,
|
|
51
52
|
responsePayload: {},
|
|
52
53
|
pid: process.pid.toString(),
|
|
@@ -55,6 +56,7 @@ class IPCMessageManager {
|
|
|
55
56
|
const messageRecord = {
|
|
56
57
|
messageId,
|
|
57
58
|
senderId: this.#id,
|
|
59
|
+
senderRole: this.#options.role,
|
|
58
60
|
requestPayload,
|
|
59
61
|
responses: {}, // record
|
|
60
62
|
startTime: performance.now(),
|
|
@@ -82,17 +84,25 @@ class IPCMessageManager {
|
|
|
82
84
|
let completed = true; // Defaults to true
|
|
83
85
|
if (this.#options.ProcessResponseMessage) {
|
|
84
86
|
completed = await this.#options.ProcessResponseMessage(inFlightMessageRecord.responses, options);
|
|
87
|
+
if (completed) {
|
|
88
|
+
inFlightMessageRecord.endTime = performance.now();
|
|
89
|
+
clearTimeout(inFlightMessageRecord.timeout);
|
|
90
|
+
inFlightMessageRecord.callBack({
|
|
91
|
+
responsePayload: Object.values(inFlightMessageRecord.responses).map(r => r.responsePayload)
|
|
92
|
+
}, options); //
|
|
93
|
+
delete this.#inflightMessages[message.messageId];
|
|
94
|
+
}
|
|
85
95
|
}
|
|
86
|
-
if (completed) {
|
|
96
|
+
else if (completed) {
|
|
87
97
|
inFlightMessageRecord.endTime = performance.now();
|
|
88
98
|
clearTimeout(inFlightMessageRecord.timeout);
|
|
89
|
-
|
|
90
|
-
inFlightMessageRecord.callBack(
|
|
99
|
+
inFlightMessageRecord.callBack(message, options); // inFlightMessageRecord.responses
|
|
100
|
+
//@@inFlightMessageRecord.callBack(Object.values(inFlightMessageRecord.responses), options) //
|
|
91
101
|
delete this.#inflightMessages[message.messageId];
|
|
92
102
|
}
|
|
93
103
|
}
|
|
94
104
|
else {
|
|
95
|
-
throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`);
|
|
105
|
+
//throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`); //@@
|
|
96
106
|
}
|
|
97
107
|
}
|
|
98
108
|
};
|
|
@@ -113,7 +123,7 @@ class IPCMessageManager {
|
|
|
113
123
|
// Process a message recieved from a worker
|
|
114
124
|
ProcessMessage = async (msg, options) => {
|
|
115
125
|
if (msg.header) {
|
|
116
|
-
const checkName = `__STS__${this.#options.namespace}__`;
|
|
126
|
+
const checkName = `__STS__${this.#options.namespace}__`; //@@ this is a broadcast becuase the unique uuid is not part of the header test
|
|
117
127
|
if (msg.header.includes(checkName)) {
|
|
118
128
|
const message = msg;
|
|
119
129
|
if (msg.messageType.localeCompare('REQUEST') === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipcMessageManager.js","sourceRoot":"","sources":["../src/ipcMessageManager.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,kDAA0B;AAI1B,+BAAoC;
|
|
1
|
+
{"version":3,"file":"ipcMessageManager.js","sourceRoot":"","sources":["../src/ipcMessageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipcMessageProcessorPrimary.js","sourceRoot":"","sources":["../src/ipcMessageProcessorPrimary.ts"],"names":[],"mappings":";;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,gDAAyE;AAMzE,2DAAiF;AAQjF,MAAa,0BAA0B;IAEnC,kBAAkB,CAAoB;IACtC,OAAO,GAAkB,IAAI,CAAC;IAE9B,YAAY,YAAyC;QACjD,MAAM,wBAAwB,GAA6B;YACvD,MAAM,EAAE,wBAAa;YACrB,6BAA6B,EAAE,IAAI;YACnC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,aAAa,EAAE,CAAC,OAAuC,EAAE,OAAY,EAAE,EAAE;gBACpE,OAAO,CAAC,MAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YACD,qBAAqB,EAAE,KAAK,EAAE,OAAuC,EAAE,OAAY,EAAuB,EAAE;gBACxG,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAG,CAAC;gBACf,CAAC;YACL,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAY,EAAE,EAAE;gBACnC,6CAA6C;gBAC7C,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,CAAC;gBAC1C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACnG,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAY,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACpG,CAAC;SACJ,CAAA;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC;IAED,WAAW,GAAG,KAAK,EAAE,OAAmB,EAAuB,EAAE;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC,CAAA;IAED,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE;QACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC,CAAA;IAED,IAAI,GAAG,GAAG,EAAE;QACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC,CAAA;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"ipcMessageProcessorPrimary.js","sourceRoot":"","sources":["../src/ipcMessageProcessorPrimary.ts"],"names":[],"mappings":";;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,gDAAyE;AAMzE,2DAAiF;AAQjF,MAAa,0BAA0B;IAEnC,kBAAkB,CAAoB;IACtC,OAAO,GAAkB,IAAI,CAAC;IAE9B,YAAY,YAAyC;QACjD,MAAM,wBAAwB,GAA6B;YACvD,MAAM,EAAE,wBAAa;YACrB,6BAA6B,EAAE,IAAI;YACnC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,CAAC,OAAuC,EAAE,OAAY,EAAE,EAAE;gBACpE,OAAO,CAAC,MAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YACD,qBAAqB,EAAE,KAAK,EAAE,OAAuC,EAAE,OAAY,EAAuB,EAAE;gBACxG,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAG,CAAC;gBACf,CAAC;YACL,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAY,EAAE,EAAE;gBACnC,6CAA6C;gBAC7C,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,CAAC;gBAC1C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACnG,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAY,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACpG,CAAC;SACJ,CAAA;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC;IAED,WAAW,GAAG,KAAK,EAAE,OAAmB,EAAuB,EAAE;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC,CAAA;IAED,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE;QACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC,CAAA;IAED,IAAI,GAAG,GAAG,EAAE;QACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC,CAAA;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAnDD,gEAmDC"}
|
|
@@ -11,6 +11,7 @@ class IPCMessageProcessorWorker {
|
|
|
11
11
|
logger: stsutils_1.defaultLogger,
|
|
12
12
|
requestResponseMessageTimeout: classOptions.requestResponseMessageTimeout,
|
|
13
13
|
namespace: classOptions.namespace,
|
|
14
|
+
role: 'CLIENT',
|
|
14
15
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
15
16
|
messageSender: (payload, options) => {
|
|
16
17
|
// Options not required for sending payloads to the master process
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipcMessageProcessorWorker.js","sourceRoot":"","sources":["../src/ipcMessageProcessorWorker.ts"],"names":[],"mappings":";;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,gDAAyE;AAIzE,2DAAiF;AASjF,MAAa,yBAAyB;IAClC,kBAAkB,CAAoB;IAEtC,YAAY,YAAwC;QAChD,MAAM,wBAAwB,GAA6B;YACvD,MAAM,EAAE,wBAAa;YACrB,6BAA6B,EAAE,YAAY,CAAC,6BAA6B;YACzE,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,kGAAkG;YAClG,aAAa,EAAE,CAAC,OAAuC,EAAE,OAAY,EAAE,EAAE;gBACrE,kEAAkE;gBACjE,OAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,qBAAqB,EAAE,KAAK,EAAE,OAAuC,EAAE,OAAY,EAAuB,EAAE;gBACxG,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAG,CAAC;gBACf,CAAC;YACL,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAY,EAAE,EAAE;gBACnC,0DAA0D;gBAC1D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAY,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAClG,CAAC;SACJ,CAAA;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC;IAED,WAAW,GAAG,KAAK,EAAE,OAAmB,EAAuB,EAAE;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAG,CAAC,CAAC;IAC7D,CAAC,CAAA;IAED,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAG,CAAC,CAAC;IACvC,CAAC,CAAA;IAED,IAAI,GAAG,GAAG,EAAE;QACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;IACtC,CAAC,CAAA;CACJ;
|
|
1
|
+
{"version":3,"file":"ipcMessageProcessorWorker.js","sourceRoot":"","sources":["../src/ipcMessageProcessorWorker.ts"],"names":[],"mappings":";;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,gDAAyE;AAIzE,2DAAiF;AASjF,MAAa,yBAAyB;IAClC,kBAAkB,CAAoB;IAEtC,YAAY,YAAwC;QAChD,MAAM,wBAAwB,GAA6B;YACvD,MAAM,EAAE,wBAAa;YACrB,6BAA6B,EAAE,YAAY,CAAC,6BAA6B;YACzE,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,IAAI,EAAE,QAAQ;YACd,kGAAkG;YAClG,aAAa,EAAE,CAAC,OAAuC,EAAE,OAAY,EAAE,EAAE;gBACrE,kEAAkE;gBACjE,OAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,qBAAqB,EAAE,KAAK,EAAE,OAAuC,EAAE,OAAY,EAAuB,EAAE;gBACxG,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAG,CAAC;gBACf,CAAC;YACL,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAY,EAAE,EAAE;gBACnC,0DAA0D;gBAC1D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAY,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAClG,CAAC;SACJ,CAAA;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC;IAED,WAAW,GAAG,KAAK,EAAE,OAAmB,EAAuB,EAAE;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAG,CAAC,CAAC;IAC7D,CAAC,CAAA;IAED,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAG,CAAC,CAAC;IACvC,CAAC,CAAA;IAED,IAAI,GAAG,GAAG,EAAE;QACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;IACtC,CAAC,CAAA;CACJ;AA3CD,8DA2CC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RedisMessageHandler = void 0;
|
|
7
|
+
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF */ // --> OFF
|
|
8
|
+
const tiny_emitter_1 = require("tiny-emitter");
|
|
9
|
+
const ipcMessageManager_1 = require("./ipcMessageManager");
|
|
10
|
+
const ioredis_1 = require("ioredis");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const REQUEST_CHANNEL = '__STS__SVC_stsappframework_request';
|
|
13
|
+
const RESPONSE_CHANNEL = '__STS__SVC_stsappframework_response';
|
|
14
|
+
class RedisMessageHandler extends tiny_emitter_1.TinyEmitter {
|
|
15
|
+
#ipcMessageManager = null;
|
|
16
|
+
#options;
|
|
17
|
+
#events = {};
|
|
18
|
+
#requestChannel;
|
|
19
|
+
#responseChannel;
|
|
20
|
+
#redisSubscriber;
|
|
21
|
+
#redisPublisher;
|
|
22
|
+
#clients = {};
|
|
23
|
+
#pingTimeout = null;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
super();
|
|
26
|
+
this.#options = options;
|
|
27
|
+
this.#requestChannel = REQUEST_CHANNEL;
|
|
28
|
+
this.#responseChannel = RESPONSE_CHANNEL;
|
|
29
|
+
const redisOptions = {
|
|
30
|
+
showFriendlyErrorStack: true,
|
|
31
|
+
maxRetriesPerRequest: 20
|
|
32
|
+
};
|
|
33
|
+
this.#redisSubscriber = new ioredis_1.Redis(this.#options.redisUrl, redisOptions);
|
|
34
|
+
this.#redisPublisher = new ioredis_1.Redis(this.#options.redisUrl, redisOptions);
|
|
35
|
+
this.#redisSubscriber.subscribe(this.#requestChannel, this.#responseChannel, (error, count) => {
|
|
36
|
+
if (error) {
|
|
37
|
+
// Just like other commands, subscribe() can fail for some reasons, // ex network issues.
|
|
38
|
+
this.#LogError(chalk_1.default.red(`RedisAdminManager:constructor(): PID: [${process.pid}] Role: [${this.#options.role}] Error - Failed to subscribe: [${error}]`));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// `count` represents the number of channels this client is currently subscribed to.
|
|
42
|
+
this.#LogInfo(chalk_1.default.white(`RedisAdminManager:constructor(): PID: [${process.pid}] Role: [${this.#options.role}] Subscribed successfully! This client is currently subscribed to ${count} channels.`));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
this.SetupPrimary();
|
|
46
|
+
if (this.#options.role.localeCompare('CLIENT') === 0) {
|
|
47
|
+
const ping = () => {
|
|
48
|
+
this.#pingTimeout = setTimeout(() => {
|
|
49
|
+
this.emit('ping', this.#ipcMessageManager?.id, (response) => { });
|
|
50
|
+
ping();
|
|
51
|
+
}, 1000).unref();
|
|
52
|
+
};
|
|
53
|
+
ping();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.on('ping', (id, callback) => {
|
|
57
|
+
if (this.#clients[id]) {
|
|
58
|
+
clearTimeout(this.#clients[id].timeout);
|
|
59
|
+
this.#clients[id].pingCount++;
|
|
60
|
+
this.#clients[id].timeout = setTimeout(() => {
|
|
61
|
+
delete this.#clients[id];
|
|
62
|
+
}, 2000);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.#clients[id] = {
|
|
66
|
+
id,
|
|
67
|
+
clientConnected: new Date(),
|
|
68
|
+
pingCount: 0,
|
|
69
|
+
timeout: setTimeout(() => {
|
|
70
|
+
delete this.#clients[id];
|
|
71
|
+
}, 2000)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
callback('ok');
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
#LogInfo(message) {
|
|
79
|
+
this.#options.logger.info(message);
|
|
80
|
+
}
|
|
81
|
+
#LogError(message) {
|
|
82
|
+
this.#options.logger.error(message);
|
|
83
|
+
}
|
|
84
|
+
#processRawMessage = (channel, rawmessage) => {
|
|
85
|
+
const message = JSON.parse(rawmessage);
|
|
86
|
+
this.#ipcMessageManager?.ProcessMessage(message, { channel });
|
|
87
|
+
};
|
|
88
|
+
SetupPrimary = () => {
|
|
89
|
+
const ipcMessageManagerOptions = {
|
|
90
|
+
logger: this.#options.logger,
|
|
91
|
+
requestResponseMessageTimeout: 2000,
|
|
92
|
+
namespace: this.#options.namespace,
|
|
93
|
+
role: this.#options.role,
|
|
94
|
+
messageSender: this.#messageSender,
|
|
95
|
+
// This method is used to calculate if all responses have been received from multiple clients (broadcast)
|
|
96
|
+
// returns true/false.
|
|
97
|
+
ProcessResponseMessage: this.#ProcessResponseMessage,
|
|
98
|
+
// This gets called when an event is received from a message receiver (when ProcessMessage is invoked from the receiver event handler)
|
|
99
|
+
ProcessRequestMessage: this.#processPayload,
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
101
|
+
messageReceiverStart: (options) => {
|
|
102
|
+
this.#redisSubscriber.on("message", this.#processRawMessage);
|
|
103
|
+
},
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
105
|
+
messageReceiverStop: (options) => {
|
|
106
|
+
this.#redisSubscriber.off("message", this.#processRawMessage);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
this.#ipcMessageManager = new ipcMessageManager_1.IPCMessageManager(ipcMessageManagerOptions);
|
|
110
|
+
};
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
112
|
+
#messageSender = (payload, options) => {
|
|
113
|
+
if (payload.messageType.localeCompare('REQUEST') === 0) {
|
|
114
|
+
this.#redisPublisher.publish(this.#requestChannel, JSON.stringify(payload));
|
|
115
|
+
}
|
|
116
|
+
else if (payload.messageType.localeCompare('RESPONSE') === 0) {
|
|
117
|
+
this.#redisPublisher.publish(this.#responseChannel, JSON.stringify(payload));
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
121
|
+
#ProcessResponseMessage = async (responses, options) => {
|
|
122
|
+
// Now check if we have all responses ...
|
|
123
|
+
let allFound = false;
|
|
124
|
+
Object.keys(responses).forEach(r => {
|
|
125
|
+
if (responses[r].senderRole.localeCompare('CLIENT') === 0) {
|
|
126
|
+
allFound = true;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
if (allFound) {
|
|
130
|
+
return allFound;
|
|
131
|
+
}
|
|
132
|
+
let found = true;
|
|
133
|
+
Object.values(this.#clients).map(c => {
|
|
134
|
+
if (!responses[c.id]) {
|
|
135
|
+
found = false;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
if (found) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
};
|
|
143
|
+
#processPayload = (payload, options) => {
|
|
144
|
+
// check the event name from the collection and invoke that function
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
if (payload.messageType.localeCompare('REQUEST') === 0) {
|
|
147
|
+
if (payload.requestPayload['__eventName']) {
|
|
148
|
+
const eventName = payload.requestPayload['__eventName'];
|
|
149
|
+
// Only process events that I have registered interest in (using .on)
|
|
150
|
+
if (this.#events[eventName]) {
|
|
151
|
+
try {
|
|
152
|
+
//const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
|
|
153
|
+
this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage) => {
|
|
154
|
+
resolve(responseMessage);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
reject(error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
// p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
|
|
166
|
+
on(event, callback, ctx) {
|
|
167
|
+
if (this.#events[event]) {
|
|
168
|
+
// Update the event with the same name
|
|
169
|
+
delete this.#events[event];
|
|
170
|
+
}
|
|
171
|
+
const eventObject = {
|
|
172
|
+
event,
|
|
173
|
+
callback,
|
|
174
|
+
ctx
|
|
175
|
+
};
|
|
176
|
+
this.#events[eventObject.event] = eventObject;
|
|
177
|
+
return this;
|
|
178
|
+
}
|
|
179
|
+
off(event, callback) {
|
|
180
|
+
if (this.#events[event]) {
|
|
181
|
+
delete this.#events[event];
|
|
182
|
+
}
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
Start = () => {
|
|
186
|
+
this.#ipcMessageManager?.Start();
|
|
187
|
+
};
|
|
188
|
+
Stop = () => {
|
|
189
|
+
if (this.#pingTimeout) {
|
|
190
|
+
clearTimeout(this.#pingTimeout);
|
|
191
|
+
this.#pingTimeout = null;
|
|
192
|
+
}
|
|
193
|
+
this.#ipcMessageManager?.Stop();
|
|
194
|
+
this.#redisSubscriber.quit();
|
|
195
|
+
this.#redisSubscriber.disconnect();
|
|
196
|
+
this.#redisPublisher.quit();
|
|
197
|
+
this.#redisPublisher.disconnect();
|
|
198
|
+
};
|
|
199
|
+
emit(event, ...args) {
|
|
200
|
+
(async () => {
|
|
201
|
+
const retVal = await this.#ipcMessageManager?.SendMessage({
|
|
202
|
+
__eventName: event,
|
|
203
|
+
args: args.slice(0, args.length - 1)
|
|
204
|
+
});
|
|
205
|
+
// Invoke the response callback
|
|
206
|
+
args[args.length - 1](retVal);
|
|
207
|
+
})();
|
|
208
|
+
return this;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
exports.RedisMessageHandler = RedisMessageHandler;
|
|
212
|
+
//# sourceMappingURL=redisMessageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redisMessageHandler.js","sourceRoot":"","sources":["../src/redisMessageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
|
|
7
|
+
const vitest_1 = require("vitest");
|
|
8
|
+
const redisMessageHandler_1 = require("./redisMessageHandler");
|
|
9
|
+
const stsutils_1 = require("@nsshunt/stsutils");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const uuid_1 = require("uuid");
|
|
12
|
+
const testcontainers_1 = require("testcontainers");
|
|
13
|
+
(0, vitest_1.describe)("Redis Message Handler Test", () => {
|
|
14
|
+
let ioRedisContainer;
|
|
15
|
+
let ioRedisMessageProcessorUrl = '';
|
|
16
|
+
(0, vitest_1.beforeAll)(async () => {
|
|
17
|
+
// --- [ioRedis ] -------------------------------------------------------------------------
|
|
18
|
+
ioRedisContainer = await new testcontainers_1.GenericContainer("redis")
|
|
19
|
+
.withExposedPorts(6379)
|
|
20
|
+
.start();
|
|
21
|
+
ioRedisMessageProcessorUrl = `redis://${ioRedisContainer.getHost()}:${ioRedisContainer.getMappedPort(6379)}`;
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.afterAll)(async () => {
|
|
24
|
+
if (ioRedisContainer) {
|
|
25
|
+
await ioRedisContainer.stop();
|
|
26
|
+
}
|
|
27
|
+
}, 5000);
|
|
28
|
+
class Server {
|
|
29
|
+
#r1;
|
|
30
|
+
constructor() {
|
|
31
|
+
this.#r1 = new redisMessageHandler_1.RedisMessageHandler({
|
|
32
|
+
logger: stsutils_1.defaultLogger,
|
|
33
|
+
role: 'SERVER',
|
|
34
|
+
redisUrl: ioRedisMessageProcessorUrl, // goptions.imRedisMessageProcessorUrl,
|
|
35
|
+
namespace: 'redistestingstsframework'
|
|
36
|
+
});
|
|
37
|
+
this.#r1.Start();
|
|
38
|
+
this.#r1.on('fromworkerredis', (arg1, arg2, arg3, callback) => {
|
|
39
|
+
console.log(chalk_1.default.magenta(`${process.pid}: fromworkerredis.ON: [${arg1} ${arg2} ${arg3}]`));
|
|
40
|
+
//callback(null);
|
|
41
|
+
callback({ status: `response message from event = fromworkerredis with args ${arg1} ${arg2} ${arg3}` });
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
Start = async (expectedResponses, iterations, delay) => {
|
|
45
|
+
for (let i = 0; i < iterations; i++) {
|
|
46
|
+
/*
|
|
47
|
+
Object.keys(p).forEach(async (pKey) => {
|
|
48
|
+
const emitobj = { i: i, a: 'a', b: 'b', worker: pKey };
|
|
49
|
+
console.log(chalk.green(`${process.pid}: emit event to worker: [${pKey}] fromprimary: [${JSON.stringify(emitobj)}`));
|
|
50
|
+
p[pKey].emit('fromprimary', emitobj, (response: any) => {
|
|
51
|
+
console.log(chalk.green(`${process.pid}: ${JSON.stringify(response)}`));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
*/
|
|
55
|
+
const emitobj = { i: i, a: 'a', b: 'b' };
|
|
56
|
+
console.log(chalk_1.default.cyan(`${process.pid}: emit event fromprimaryredis fromprimary: [${JSON.stringify(emitobj)}`));
|
|
57
|
+
this.#r1.emit('fromprimaryredis', emitobj, (response) => {
|
|
58
|
+
console.log(chalk_1.default.cyan(`${process.pid}: Response(fromprimaryredis): Count: [${response.length}] [${JSON.stringify(response)}]`));
|
|
59
|
+
(0, vitest_1.expect)(response.length).toEqual(expectedResponses);
|
|
60
|
+
});
|
|
61
|
+
await (0, stsutils_1.Sleep)(delay);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
Stop = () => {
|
|
65
|
+
this.#r1.Stop();
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
class Client {
|
|
69
|
+
#r1;
|
|
70
|
+
constructor() {
|
|
71
|
+
this.#r1 = new redisMessageHandler_1.RedisMessageHandler({
|
|
72
|
+
logger: stsutils_1.defaultLogger,
|
|
73
|
+
role: 'CLIENT',
|
|
74
|
+
redisUrl: ioRedisMessageProcessorUrl, // goptions.imRedisMessageProcessorUrl,
|
|
75
|
+
namespace: 'redistestingstsframework'
|
|
76
|
+
});
|
|
77
|
+
this.#r1.Start();
|
|
78
|
+
this.#r1.on('fromprimaryredis', (arg1, callback) => {
|
|
79
|
+
//callback();
|
|
80
|
+
console.log(chalk_1.default.yellow(`${process.pid}: fromprimaryredis.ON: [${JSON.stringify(arg1)}]`));
|
|
81
|
+
callback({ status: `PID: [${process.pid}]: response message from event = fromprimaryredis with args ${JSON.stringify(arg1)}` });
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
Start = async (iterations, delay) => {
|
|
85
|
+
for (let i = 0; i < iterations; i++) {
|
|
86
|
+
const id = (0, uuid_1.v4)();
|
|
87
|
+
/*
|
|
88
|
+
console.log(chalk.yellow(`${process.pid}: emit event fromworker: [${id} ${i} Hello]`));
|
|
89
|
+
w1.emit('fromworker', id, i, 'Hello', (response: any) => {
|
|
90
|
+
console.log(chalk.yellow(`${process.pid}: ${JSON.stringify(response)}`));
|
|
91
|
+
});
|
|
92
|
+
*/
|
|
93
|
+
console.log(chalk_1.default.green(`${process.pid}: emit event fromworkerredis: [${id} ${i} Hello]`));
|
|
94
|
+
this.#r1.emit('fromworkerredis', id, i, 'Hello', (response) => {
|
|
95
|
+
console.log(chalk_1.default.green(`${process.pid}: Response(fromworkerredis): [${JSON.stringify(response)}]`));
|
|
96
|
+
});
|
|
97
|
+
await (0, stsutils_1.Sleep)(delay);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
Stop = () => {
|
|
101
|
+
this.#r1.Stop();
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
(0, vitest_1.test)('Test 1', async () => {
|
|
105
|
+
const clientCount = 20;
|
|
106
|
+
const iterations = 5;
|
|
107
|
+
const delay = 100;
|
|
108
|
+
vitest_1.expect.assertions(iterations);
|
|
109
|
+
// Setup new server and clients
|
|
110
|
+
const server = new Server();
|
|
111
|
+
const clients = [];
|
|
112
|
+
for (let i = 0; i < clientCount; i++) {
|
|
113
|
+
clients.push(new Client());
|
|
114
|
+
}
|
|
115
|
+
// Need this delay to ensure the pings are all sent and received between the clients and the server
|
|
116
|
+
await (0, stsutils_1.Sleep)(2000);
|
|
117
|
+
// Start sending messages
|
|
118
|
+
server.Start(clientCount, iterations, delay);
|
|
119
|
+
clients.forEach(c => c.Start(iterations, delay));
|
|
120
|
+
// Allow time to process
|
|
121
|
+
await (0, stsutils_1.Sleep)(3000);
|
|
122
|
+
// All done, stop.
|
|
123
|
+
clients.forEach(c => c.Stop());
|
|
124
|
+
server.Stop();
|
|
125
|
+
}, 30000);
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=redisMessageHandler.test.js.map
|