@nsshunt/stsappframework 3.1.118 → 3.1.121
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 +9 -9
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"redisMessageHandler.test.js","sourceRoot":"","sources":["../src/redisMessageHandler.test.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/app.js
CHANGED
|
@@ -12,6 +12,9 @@ const ipcMessageProcessorWorker_1 = require("./../ipcMessageProcessorWorker");
|
|
|
12
12
|
const stsutils_1 = require("@nsshunt/stsutils");
|
|
13
13
|
const ipcMessageProcessorPrimary_1 = require("./../ipcMessageProcessorPrimary");
|
|
14
14
|
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
+
const uuid_1 = require("uuid");
|
|
16
|
+
const redisMessageHandler_1 = require("./../redisMessageHandler");
|
|
17
|
+
const stsconfig_1 = require("@nsshunt/stsconfig");
|
|
15
18
|
const sleepVal = 0;
|
|
16
19
|
const maxLoop = 100;
|
|
17
20
|
const zzz = async () => {
|
|
@@ -34,8 +37,7 @@ const zzz = async () => {
|
|
|
34
37
|
console.log(chalk_1.default.green(JSON.stringify(retVal)));
|
|
35
38
|
}
|
|
36
39
|
};
|
|
37
|
-
|
|
38
|
-
new __1.MasterProcessBase((0, appConfig_1.ServiceConfigOptions)(true, node_cluster_1.default.isPrimary)).SetupServer();
|
|
40
|
+
const StartTestPrimary = () => {
|
|
39
41
|
setTimeout(async () => {
|
|
40
42
|
for (const id in node_cluster_1.default.workers) {
|
|
41
43
|
const p1 = new ipcMessageProcessorPrimary_1.IPCMessageProcessorPrimary({
|
|
@@ -82,9 +84,8 @@ if (node_cluster_1.default.isPrimary) {
|
|
|
82
84
|
}
|
|
83
85
|
zzz();
|
|
84
86
|
}, 1000);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
new appWorkerWSS_1.WorkerProcess((0, appConfig_1.ServiceConfigOptions)(true, node_cluster_1.default.isPrimary)).SetupServer();
|
|
87
|
+
};
|
|
88
|
+
const StartTestWorker = () => {
|
|
88
89
|
const w1 = new ipcMessageProcessorWorker_1.IPCMessageProcessorWorker({
|
|
89
90
|
logger: stsutils_1.defaultLogger,
|
|
90
91
|
namespace: 'test1',
|
|
@@ -153,5 +154,111 @@ else {
|
|
|
153
154
|
await (0, stsutils_1.Sleep)(sleepVal);
|
|
154
155
|
}
|
|
155
156
|
}, 1000);
|
|
157
|
+
};
|
|
158
|
+
const iterations = 100;
|
|
159
|
+
const delay = 100;
|
|
160
|
+
if (node_cluster_1.default.isPrimary) {
|
|
161
|
+
new __1.MasterProcessBase((0, appConfig_1.ServiceConfigOptions)(true, node_cluster_1.default.isPrimary)).SetupServer();
|
|
162
|
+
//StartTestPrimary();
|
|
163
|
+
setTimeout(() => {
|
|
164
|
+
const p = {};
|
|
165
|
+
/*
|
|
166
|
+
for (const id in cluster.workers) {
|
|
167
|
+
const worker = cluster.workers[id] as Worker;
|
|
168
|
+
|
|
169
|
+
const p1: IPCMessageHandler = new IPCMessageHandler({
|
|
170
|
+
logger: defaultLogger,
|
|
171
|
+
requestResponseMessageTimeout: 5000,
|
|
172
|
+
namespace: 'aabbcc'
|
|
173
|
+
});
|
|
174
|
+
p1.Start(worker);
|
|
175
|
+
|
|
176
|
+
p1.on('fromworker', (arg1: string, arg2: number, arg3: string, callback: any) => {
|
|
177
|
+
//callback(null);
|
|
178
|
+
callback({status: `response message from event = fromworker with args ${arg1} ${arg2} ${arg3}`})
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
p[worker.id] = p1;
|
|
182
|
+
}
|
|
183
|
+
*/
|
|
184
|
+
const r1 = new redisMessageHandler_1.RedisMessageHandler({
|
|
185
|
+
logger: stsutils_1.defaultLogger,
|
|
186
|
+
role: 'SERVER',
|
|
187
|
+
redisUrl: stsconfig_1.goptions.imRedisMessageProcessorUrl,
|
|
188
|
+
namespace: 'mytestapp'
|
|
189
|
+
});
|
|
190
|
+
r1.Start();
|
|
191
|
+
r1.on('fromworkerredis', (arg1, arg2, arg3, callback) => {
|
|
192
|
+
console.log(chalk_1.default.magenta(`${process.pid}: fromworkerredis.ON: [${arg1} ${arg2} ${arg3}]`));
|
|
193
|
+
//callback(null);
|
|
194
|
+
callback({ status: `response message from event = fromworkerredis with args ${arg1} ${arg2} ${arg3}` });
|
|
195
|
+
});
|
|
196
|
+
setTimeout(async () => {
|
|
197
|
+
for (let i = 0; i < iterations; i++) {
|
|
198
|
+
/*
|
|
199
|
+
Object.keys(p).forEach(async (pKey) => {
|
|
200
|
+
const emitobj = { i: i, a: 'a', b: 'b', worker: pKey };
|
|
201
|
+
console.log(chalk.green(`${process.pid}: emit event to worker: [${pKey}] fromprimary: [${JSON.stringify(emitobj)}`));
|
|
202
|
+
p[pKey].emit('fromprimary', emitobj, (response: any) => {
|
|
203
|
+
console.log(chalk.green(`${process.pid}: ${JSON.stringify(response)}`));
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
*/
|
|
207
|
+
const emitobj = { i: i, a: 'a', b: 'b' };
|
|
208
|
+
console.log(chalk_1.default.cyan(`${process.pid}: emit event fromprimaryredis fromprimary: [${JSON.stringify(emitobj)}`));
|
|
209
|
+
r1.emit('fromprimaryredis', emitobj, (response) => {
|
|
210
|
+
console.log(chalk_1.default.cyan(`${process.pid}: Response(fromprimaryredis): [${JSON.stringify(response)}]`));
|
|
211
|
+
});
|
|
212
|
+
await (0, stsutils_1.Sleep)(delay);
|
|
213
|
+
}
|
|
214
|
+
}, 1000);
|
|
215
|
+
}, 1000);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
new appWorkerWSS_1.WorkerProcess((0, appConfig_1.ServiceConfigOptions)(true, node_cluster_1.default.isPrimary)).SetupServer();
|
|
219
|
+
//StartTestWorker();
|
|
220
|
+
setTimeout(async () => {
|
|
221
|
+
/*
|
|
222
|
+
const w1: IPCMessageHandler = new IPCMessageHandler({
|
|
223
|
+
logger: defaultLogger,
|
|
224
|
+
requestResponseMessageTimeout: 5000,
|
|
225
|
+
namespace: 'aabbcc'
|
|
226
|
+
});
|
|
227
|
+
w1.Start();
|
|
228
|
+
|
|
229
|
+
w1.on('fromprimary', (arg1: JSONObject, callback: any) => {
|
|
230
|
+
//callback();
|
|
231
|
+
callback({status: `response message from event = fromprimary with args ${JSON.stringify(arg1)}`})
|
|
232
|
+
});
|
|
233
|
+
*/
|
|
234
|
+
const r1 = new redisMessageHandler_1.RedisMessageHandler({
|
|
235
|
+
logger: stsutils_1.defaultLogger,
|
|
236
|
+
role: 'CLIENT',
|
|
237
|
+
redisUrl: stsconfig_1.goptions.imRedisMessageProcessorUrl,
|
|
238
|
+
namespace: 'mytestapp'
|
|
239
|
+
});
|
|
240
|
+
r1.Start();
|
|
241
|
+
r1.on('fromprimaryredis', (arg1, callback) => {
|
|
242
|
+
//callback();
|
|
243
|
+
console.log(chalk_1.default.yellow(`${process.pid}: fromprimaryredis.ON: [${JSON.stringify(arg1)}]`));
|
|
244
|
+
callback({ status: `PID: [${process.pid}]: response message from event = fromprimaryredis with args ${JSON.stringify(arg1)}` });
|
|
245
|
+
});
|
|
246
|
+
setTimeout(async () => {
|
|
247
|
+
for (let i = 0; i < iterations; i++) {
|
|
248
|
+
const id = (0, uuid_1.v4)();
|
|
249
|
+
/*
|
|
250
|
+
console.log(chalk.yellow(`${process.pid}: emit event fromworker: [${id} ${i} Hello]`));
|
|
251
|
+
w1.emit('fromworker', id, i, 'Hello', (response: any) => {
|
|
252
|
+
console.log(chalk.yellow(`${process.pid}: ${JSON.stringify(response)}`));
|
|
253
|
+
});
|
|
254
|
+
*/
|
|
255
|
+
console.log(chalk_1.default.green(`${process.pid}: emit event fromworkerredis: [${id} ${i} Hello]`));
|
|
256
|
+
r1.emit('fromworkerredis', id, i, 'Hello', (response) => {
|
|
257
|
+
console.log(chalk_1.default.green(`${process.pid}: Response(fromworkerredis): [${JSON.stringify(response)}]`));
|
|
258
|
+
});
|
|
259
|
+
await (0, stsutils_1.Sleep)(delay);
|
|
260
|
+
}
|
|
261
|
+
}, 1000);
|
|
262
|
+
}, 1000);
|
|
156
263
|
}
|
|
157
264
|
//# sourceMappingURL=app.js.map
|
package/dist/testing/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/testing/app.ts"],"names":[],"mappings":";;;;;AAAA,wFAAwF,CAAE,UAAU;AACpG,2CAAkD;AAClD,4BAAwC;AACxC,iDAA8C;AAE9C,gEAA+C;AAE/C,8EAA0E;AAC1E,gDAAqE;AAErE,gFAA4E;AAI5E,kDAA0B;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/testing/app.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nsshunt/stsappframework",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.121",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"@types/jest": "^29.5.12",
|
|
35
35
|
"@types/jsonwebtoken": "^9.0.6",
|
|
36
36
|
"@types/uuid": "^9.0.8",
|
|
37
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
38
|
-
"@typescript-eslint/parser": "^7.
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^7.9.0",
|
|
38
|
+
"@typescript-eslint/parser": "^7.9.0",
|
|
39
39
|
"eslint": "^8.57.0",
|
|
40
40
|
"jest": "^29.7.0",
|
|
41
41
|
"testcontainers": "^10.9.0",
|
|
@@ -44,14 +44,14 @@
|
|
|
44
44
|
"vitest": "^1.6.0"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@grpc/grpc-js": "^1.10.
|
|
47
|
+
"@grpc/grpc-js": "^1.10.8",
|
|
48
48
|
"@grpc/proto-loader": "^0.7.13",
|
|
49
49
|
"@influxdata/influxdb-client": "^1.33.2",
|
|
50
50
|
"@influxdata/influxdb-client-apis": "^1.33.2",
|
|
51
|
-
"@nsshunt/stsconfig": "^1.25.
|
|
52
|
-
"@nsshunt/stsdatamanagement": "^1.18.
|
|
53
|
-
"@nsshunt/stsobservability": "^1.0.
|
|
54
|
-
"@nsshunt/stsutils": "^1.16.
|
|
51
|
+
"@nsshunt/stsconfig": "^1.25.131",
|
|
52
|
+
"@nsshunt/stsdatamanagement": "^1.18.42",
|
|
53
|
+
"@nsshunt/stsobservability": "^1.0.29",
|
|
54
|
+
"@nsshunt/stsutils": "^1.16.60",
|
|
55
55
|
"@socket.io/cluster-adapter": "^0.2.2",
|
|
56
56
|
"@socket.io/redis-streams-adapter": "^0.2.2",
|
|
57
57
|
"@types/on-headers": "^1.0.3",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"socket.io": "^4.7.5",
|
|
77
77
|
"socket.io-client": "^4.7.5",
|
|
78
78
|
"supports-color": "^9.4.0",
|
|
79
|
-
"systeminformation": "^5.22.
|
|
79
|
+
"systeminformation": "^5.22.9",
|
|
80
80
|
"tiny-emitter": "^2.1.0",
|
|
81
81
|
"tough-cookie": "^4.1.4",
|
|
82
82
|
"uuid": "^9.0.1",
|
package/runtest2.sh
CHANGED
package/src/commonTypes.ts
CHANGED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF */ // --> OFF
|
|
2
|
+
import { TinyEmitter } from "tiny-emitter";
|
|
3
|
+
import cluster, { Worker } from 'node:cluster'
|
|
4
|
+
import { ISTSLogger, JSONObject, defaultLogger } from '@nsshunt/stsutils'
|
|
5
|
+
|
|
6
|
+
import { IIPCMessageProcessorIPCPayload } from './commonTypes'
|
|
7
|
+
|
|
8
|
+
import { IPCMessageManager, IPCMessageManagerOptions } from './ipcMessageManager'
|
|
9
|
+
|
|
10
|
+
export interface IPCMessageHandlerOptions {
|
|
11
|
+
logger: ISTSLogger
|
|
12
|
+
requestResponseMessageTimeout: number
|
|
13
|
+
namespace: string
|
|
14
|
+
//processPayload?: (payload: IIPCMessageProcessorIPCPayload, options: any) => Promise<JSONObject>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class IPCMessageHandler extends TinyEmitter {
|
|
18
|
+
#ipcMessageManager: IPCMessageManager | null = null;
|
|
19
|
+
#options: IPCMessageHandlerOptions;
|
|
20
|
+
#worker: Worker | null = null;
|
|
21
|
+
#events: JSONObject = { };
|
|
22
|
+
|
|
23
|
+
constructor(options: IPCMessageHandlerOptions) {
|
|
24
|
+
super();
|
|
25
|
+
this.#options = options;
|
|
26
|
+
if (cluster.isPrimary) {
|
|
27
|
+
this.SetupPrimary();
|
|
28
|
+
} else {
|
|
29
|
+
this.SetupWorker();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get __events() {
|
|
34
|
+
return this.#events;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
SetupPrimary = () => {
|
|
38
|
+
const ipcMessageManagerOptions: IPCMessageManagerOptions = {
|
|
39
|
+
logger: defaultLogger,
|
|
40
|
+
requestResponseMessageTimeout: 2000,
|
|
41
|
+
namespace: this.#options.namespace,
|
|
42
|
+
role: 'SERVER',
|
|
43
|
+
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
44
|
+
(options.worker as any).send(payload);
|
|
45
|
+
},
|
|
46
|
+
ProcessRequestMessage: async (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
47
|
+
return this.#processPayload(payload, options);
|
|
48
|
+
},
|
|
49
|
+
messageReceiverStart: (options: any) => {
|
|
50
|
+
// Receive a message to process from a worker
|
|
51
|
+
const worker = (options.worker as Worker);
|
|
52
|
+
worker.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
53
|
+
},
|
|
54
|
+
messageReceiverStop: (options: any) => {
|
|
55
|
+
const worker = (options.worker as Worker);
|
|
56
|
+
worker.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.#ipcMessageManager = new IPCMessageManager(ipcMessageManagerOptions);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
SetupWorker = () => {
|
|
63
|
+
const ipcMessageManagerOptions: IPCMessageManagerOptions = {
|
|
64
|
+
logger: defaultLogger,
|
|
65
|
+
requestResponseMessageTimeout: this.#options.requestResponseMessageTimeout,
|
|
66
|
+
namespace: this.#options.namespace,
|
|
67
|
+
role: 'CLIENT',
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
69
|
+
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
70
|
+
// Options not required for sending payloads to the master process
|
|
71
|
+
(process as any).send(payload);
|
|
72
|
+
},
|
|
73
|
+
ProcessRequestMessage: async (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
74
|
+
return this.#processPayload(payload, options);
|
|
75
|
+
},
|
|
76
|
+
messageReceiverStart: (options: any) => {
|
|
77
|
+
// Receive a message response back from the primary thread
|
|
78
|
+
process.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
79
|
+
},
|
|
80
|
+
messageReceiverStop: (options: any) => {
|
|
81
|
+
process.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.#ipcMessageManager = new IPCMessageManager(ipcMessageManagerOptions);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
SendMessage = async (payload: JSONObject): Promise<JSONObject> => {
|
|
88
|
+
if (this.#ipcMessageManager) {
|
|
89
|
+
if (this.#worker) {
|
|
90
|
+
return this.#ipcMessageManager?.SendMessage(payload, { worker: this.#worker });
|
|
91
|
+
} else {
|
|
92
|
+
return this.#ipcMessageManager?.SendMessage(payload, { });
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
// Error state - no #ipcMessageManager set
|
|
96
|
+
return { };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#processPayload = (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
101
|
+
// check the event name from the collection and invoke that function
|
|
102
|
+
return new Promise<JSONObject>((resolve, reject) => {
|
|
103
|
+
if (payload.messageType.localeCompare('REQUEST') === 0) {
|
|
104
|
+
if (payload.requestPayload['__eventName']) {
|
|
105
|
+
const eventName = payload.requestPayload['__eventName'];
|
|
106
|
+
if (this.#events[eventName]) {
|
|
107
|
+
try {
|
|
108
|
+
//const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
|
|
109
|
+
this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage: any) => {
|
|
110
|
+
resolve(responseMessage);
|
|
111
|
+
});
|
|
112
|
+
} catch (error) {
|
|
113
|
+
reject(error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
|
|
122
|
+
override on(event: string, callback: any, ctx?: any): this {
|
|
123
|
+
if (this.#events[event]) {
|
|
124
|
+
// Update the event with the same name
|
|
125
|
+
delete this.#events[event];
|
|
126
|
+
}
|
|
127
|
+
const eventObject = {
|
|
128
|
+
event,
|
|
129
|
+
callback,
|
|
130
|
+
ctx
|
|
131
|
+
}
|
|
132
|
+
this.#events[eventObject.event] = eventObject;
|
|
133
|
+
return this;
|
|
134
|
+
//return super.on(event, callback, ctx);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
override off(event: string, callback?: any): this {
|
|
138
|
+
if (this.#events[event]) {
|
|
139
|
+
delete this.#events[event];
|
|
140
|
+
}
|
|
141
|
+
return this;
|
|
142
|
+
//return super.off(event, callback);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
Start = (worker?: Worker) => {
|
|
146
|
+
if (worker) {
|
|
147
|
+
this.#ipcMessageManager?.Start({ worker });
|
|
148
|
+
this.#worker = worker;
|
|
149
|
+
} else {
|
|
150
|
+
this.#ipcMessageManager?.Start({ });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
Stop = () => {
|
|
155
|
+
if (this.#worker) {
|
|
156
|
+
this.#ipcMessageManager?.Stop({ worker: this.#worker });
|
|
157
|
+
this.#worker = null;
|
|
158
|
+
} else {
|
|
159
|
+
this.#ipcMessageManager?.Stop({ });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
get worker(): Worker | null {
|
|
164
|
+
return this.#worker;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
override emit(event: string, ...args: any[]): this {
|
|
168
|
+
|
|
169
|
+
const sendMessage = async () => {
|
|
170
|
+
const retVal = await this.SendMessage({
|
|
171
|
+
__eventName: event,
|
|
172
|
+
args: args.slice(0, args.length-1)
|
|
173
|
+
});
|
|
174
|
+
// Invoke the response callback
|
|
175
|
+
args[args.length-1](retVal);
|
|
176
|
+
};
|
|
177
|
+
sendMessage();
|
|
178
|
+
return this;
|
|
179
|
+
//return super.emit(event, ...args);
|
|
180
|
+
}
|
|
181
|
+
}
|
package/src/ipcMessageManager.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface IPCMessageManagerOptions {
|
|
|
11
11
|
logger: ISTSLogger
|
|
12
12
|
requestResponseMessageTimeout: number
|
|
13
13
|
namespace: string
|
|
14
|
+
role: 'SERVER' | 'CLIENT'
|
|
14
15
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => void
|
|
15
16
|
ProcessRequestMessage: (payload: IIPCMessageProcessorIPCPayload, options: any) => Promise<JSONObject>
|
|
16
17
|
ProcessResponseMessage?: (reesponses: Record<string, IIPCMessageProcessorIPCPayload>, options: any) => Promise<boolean>
|
|
@@ -48,7 +49,7 @@ export class IPCMessageManager
|
|
|
48
49
|
// Override in subclass if required
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
SendMessage = (payload: JSONObject, options
|
|
52
|
+
SendMessage = (payload: JSONObject, options?: any): Promise<JSONObject> => {
|
|
52
53
|
return new Promise((resolve, reject) => {
|
|
53
54
|
this.#SendMessage(payload, options,
|
|
54
55
|
(payload: IIPCMessageProcessorIPCPayload) => {
|
|
@@ -69,6 +70,7 @@ export class IPCMessageManager
|
|
|
69
70
|
header: this.#messageHeader,
|
|
70
71
|
messageId,
|
|
71
72
|
senderId: this.#id,
|
|
73
|
+
senderRole: this.#options.role,
|
|
72
74
|
requestPayload: payload,
|
|
73
75
|
responsePayload: { },
|
|
74
76
|
pid: process.pid.toString(),
|
|
@@ -77,6 +79,7 @@ export class IPCMessageManager
|
|
|
77
79
|
const messageRecord = {
|
|
78
80
|
messageId,
|
|
79
81
|
senderId: this.#id,
|
|
82
|
+
senderRole: this.#options.role,
|
|
80
83
|
requestPayload,
|
|
81
84
|
responses: { }, // record
|
|
82
85
|
startTime: performance.now(),
|
|
@@ -105,26 +108,33 @@ export class IPCMessageManager
|
|
|
105
108
|
let completed = true; // Defaults to true
|
|
106
109
|
if (this.#options.ProcessResponseMessage) {
|
|
107
110
|
completed = await this.#options.ProcessResponseMessage(inFlightMessageRecord.responses, options);
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
if (completed) {
|
|
112
|
+
inFlightMessageRecord.endTime = performance.now();
|
|
113
|
+
clearTimeout(inFlightMessageRecord.timeout as NodeJS.Timer);
|
|
114
|
+
inFlightMessageRecord.callBack({
|
|
115
|
+
responsePayload: Object.values(inFlightMessageRecord.responses).map(r => r.responsePayload)
|
|
116
|
+
} as any, options) //
|
|
117
|
+
delete this.#inflightMessages[message.messageId];
|
|
118
|
+
}
|
|
119
|
+
} else if (completed) {
|
|
110
120
|
inFlightMessageRecord.endTime = performance.now();
|
|
111
121
|
clearTimeout(inFlightMessageRecord.timeout as NodeJS.Timer);
|
|
112
|
-
|
|
113
|
-
inFlightMessageRecord.callBack(
|
|
122
|
+
inFlightMessageRecord.callBack(message, options) // inFlightMessageRecord.responses
|
|
123
|
+
//@@inFlightMessageRecord.callBack(Object.values(inFlightMessageRecord.responses), options) //
|
|
114
124
|
delete this.#inflightMessages[message.messageId];
|
|
115
125
|
}
|
|
116
126
|
} else {
|
|
117
|
-
throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`);
|
|
127
|
+
//throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`); //@@
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
130
|
}
|
|
121
131
|
|
|
122
|
-
Start = (options
|
|
132
|
+
Start = (options?: any) => {
|
|
123
133
|
this.#messageHeader = `__STS__${this.#options.namespace}__${uuidv4()}`;
|
|
124
134
|
this.#options.messageReceiverStart(options);
|
|
125
135
|
}
|
|
126
136
|
|
|
127
|
-
Stop = (options
|
|
137
|
+
Stop = (options?: any) => {
|
|
128
138
|
// Kill in-flight messages
|
|
129
139
|
this.#options.messageReceiverStop(options);
|
|
130
140
|
|
|
@@ -139,7 +149,7 @@ export class IPCMessageManager
|
|
|
139
149
|
// Process a message recieved from a worker
|
|
140
150
|
ProcessMessage = async (msg: any, options: any) => {
|
|
141
151
|
if (msg.header) {
|
|
142
|
-
const checkName = `__STS__${this.#options.namespace}__`;
|
|
152
|
+
const checkName = `__STS__${this.#options.namespace}__`; //@@ this is a broadcast becuase the unique uuid is not part of the header test
|
|
143
153
|
if ((msg.header as string).includes(checkName)) {
|
|
144
154
|
const message = (msg as IIPCMessageProcessorIPCPayload);
|
|
145
155
|
if (msg.messageType.localeCompare('REQUEST') === 0) {
|
|
@@ -23,6 +23,7 @@ export class IPCMessageProcessorPrimary
|
|
|
23
23
|
logger: defaultLogger,
|
|
24
24
|
requestResponseMessageTimeout: 2000,
|
|
25
25
|
namespace: classOptions.namespace,
|
|
26
|
+
role: 'SERVER',
|
|
26
27
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
27
28
|
(options.worker as any).send(payload);
|
|
28
29
|
},
|
|
@@ -20,6 +20,7 @@ export class IPCMessageProcessorWorker {
|
|
|
20
20
|
logger: defaultLogger,
|
|
21
21
|
requestResponseMessageTimeout: classOptions.requestResponseMessageTimeout,
|
|
22
22
|
namespace: classOptions.namespace,
|
|
23
|
+
role: 'CLIENT',
|
|
23
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
24
25
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
25
26
|
// Options not required for sending payloads to the master process
|