@nsshunt/stsappframework 3.1.209 → 3.1.211

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.
Files changed (82) hide show
  1. package/build.sh +5 -0
  2. package/dist/commonTypes.js.map +1 -1
  3. package/dist/index.js +0 -5
  4. package/dist/index.js.map +1 -1
  5. package/dist/masterprocessbase.js +3 -53
  6. package/dist/masterprocessbase.js.map +1 -1
  7. package/dist/processbase.js +4 -17
  8. package/dist/processbase.js.map +1 -1
  9. package/dist/testing/app.js +0 -457
  10. package/dist/testing/app.js.map +1 -1
  11. package/dist/workerprocessbase.js +1 -36
  12. package/dist/workerprocessbase.js.map +1 -1
  13. package/package.json +14 -13
  14. package/src/commonTypes.ts +2 -33
  15. package/src/index.ts +0 -5
  16. package/src/masterprocessbase.ts +4 -18
  17. package/src/processbase.ts +7 -22
  18. package/src/testing/app.ts +1 -530
  19. package/src/workerprocessbase.ts +1 -40
  20. package/types/commonTypes.d.ts +0 -23
  21. package/types/commonTypes.d.ts.map +1 -1
  22. package/types/index.d.ts +0 -5
  23. package/types/index.d.ts.map +1 -1
  24. package/types/masterprocessbase.d.ts.map +1 -1
  25. package/types/processbase.d.ts +0 -2
  26. package/types/processbase.d.ts.map +1 -1
  27. package/types/workerprocessbase.d.ts.map +1 -1
  28. package/dist/ipcMessageHandler.js +0 -189
  29. package/dist/ipcMessageHandler.js.map +0 -1
  30. package/dist/ipcMessageManager.js +0 -146
  31. package/dist/ipcMessageManager.js.map +0 -1
  32. package/dist/ipcMessageProcessorPrimary.js +0 -65
  33. package/dist/ipcMessageProcessorPrimary.js.map +0 -1
  34. package/dist/ipcMessageProcessorWorker.js +0 -61
  35. package/dist/ipcMessageProcessorWorker.js.map +0 -1
  36. package/dist/messagehandling/webWorkerMessageHandler.js +0 -280
  37. package/dist/messagehandling/webWorkerMessageHandler.js.map +0 -1
  38. package/dist/messagehandling/webWorkerSupport.js +0 -62
  39. package/dist/messagehandling/webWorkerSupport.js.map +0 -1
  40. package/dist/redisMessageHandler.js +0 -305
  41. package/dist/redisMessageHandler.js.map +0 -1
  42. package/dist/redisMessageHandler.test.js +0 -129
  43. package/dist/redisMessageHandler.test.js.map +0 -1
  44. package/dist/testing/app_ipc_legacy.js +0 -84
  45. package/dist/testing/app_ipc_legacy.js.map +0 -1
  46. package/dist/testing/app_ipcex.js +0 -69
  47. package/dist/testing/app_ipcex.js.map +0 -1
  48. package/dist/testing/app_ww.js +0 -54
  49. package/dist/testing/app_ww.js.map +0 -1
  50. package/src/ipcMessageHandler.ts +0 -201
  51. package/src/ipcMessageManager.ts +0 -171
  52. package/src/ipcMessageProcessorPrimary.ts +0 -76
  53. package/src/ipcMessageProcessorWorker.ts +0 -70
  54. package/src/messagehandling/webWorkerMessageHandler.ts +0 -341
  55. package/src/messagehandling/webWorkerSupport.ts +0 -66
  56. package/src/redisMessageHandler.test.ts +0 -157
  57. package/src/redisMessageHandler.ts +0 -371
  58. package/src/testing/app_ipc_legacy.ts +0 -87
  59. package/src/testing/app_ipcex.ts +0 -68
  60. package/src/testing/app_ww.ts +0 -68
  61. package/types/ipcMessageHandler.d.ts +0 -30
  62. package/types/ipcMessageHandler.d.ts.map +0 -1
  63. package/types/ipcMessageManager.d.ts +0 -30
  64. package/types/ipcMessageManager.d.ts.map +0 -1
  65. package/types/ipcMessageProcessorPrimary.d.ts +0 -26
  66. package/types/ipcMessageProcessorPrimary.d.ts.map +0 -1
  67. package/types/ipcMessageProcessorWorker.d.ts +0 -25
  68. package/types/ipcMessageProcessorWorker.d.ts.map +0 -1
  69. package/types/messagehandling/webWorkerMessageHandler.d.ts +0 -52
  70. package/types/messagehandling/webWorkerMessageHandler.d.ts.map +0 -1
  71. package/types/messagehandling/webWorkerSupport.d.ts +0 -6
  72. package/types/messagehandling/webWorkerSupport.d.ts.map +0 -1
  73. package/types/redisMessageHandler.d.ts +0 -51
  74. package/types/redisMessageHandler.d.ts.map +0 -1
  75. package/types/redisMessageHandler.test.d.ts +0 -2
  76. package/types/redisMessageHandler.test.d.ts.map +0 -1
  77. package/types/testing/app_ipc_legacy.d.ts +0 -2
  78. package/types/testing/app_ipc_legacy.d.ts.map +0 -1
  79. package/types/testing/app_ipcex.d.ts +0 -2
  80. package/types/testing/app_ipcex.d.ts.map +0 -1
  81. package/types/testing/app_ww.d.ts +0 -2
  82. package/types/testing/app_ww.d.ts.map +0 -1
@@ -1,280 +0,0 @@
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.WebWorkerMessageHandler = 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 chalk_1 = __importDefault(require("chalk"));
11
- class WebWorkerMessageHandler extends tiny_emitter_1.TinyEmitter {
12
- #ipcMessageManager = null;
13
- #options;
14
- #events = {};
15
- #clients = {};
16
- #pingTimeout = null;
17
- #messagePort;
18
- constructor(options) {
19
- super();
20
- this.#options = options;
21
- this.#messagePort = options.messagePort;
22
- this.SetupPrimary();
23
- if (this.#options.role.localeCompare('CLIENT') === 0) {
24
- const ping = () => {
25
- this.#pingTimeout = setTimeout(() => {
26
- const pingData = {
27
- id: this.#ipcMessageManager.id,
28
- groups: this.#options.groups,
29
- };
30
- if (this.#options.processOptions) {
31
- pingData.serviceProcessContext = this.#options.processOptions.serviceProcessContext;
32
- }
33
- this.emit('ping', pingData, (response) => { });
34
- ping();
35
- }, 1000).unref();
36
- };
37
- ping();
38
- }
39
- else {
40
- this.on('ping', (pingData, callback) => {
41
- const { id, groups, serviceProcessContext } = pingData;
42
- if (this.#clients[id]) {
43
- clearTimeout(this.#clients[id].timeout);
44
- this.#clients[id].pingCount++;
45
- this.#clients[id].timeout = setTimeout(() => {
46
- delete this.#clients[id];
47
- }, 2000);
48
- this.#clients[id].groups = groups;
49
- this.#clients[id].serviceProcessContext = serviceProcessContext;
50
- }
51
- else {
52
- this.#clients[id] = {
53
- id,
54
- clientConnected: new Date(),
55
- pingCount: 0,
56
- timeout: setTimeout(() => {
57
- delete this.#clients[id];
58
- }, 2000),
59
- groups,
60
- serviceProcessContext
61
- };
62
- }
63
- callback('ok');
64
- });
65
- }
66
- }
67
- #processRawMessage = (rawmessage) => {
68
- const message = JSON.parse(rawmessage);
69
- this.#ipcMessageManager?.ProcessMessage(message, {});
70
- };
71
- get clients() {
72
- return this.#clients;
73
- }
74
- get groups() {
75
- return this.#options.groups;
76
- }
77
- AddGroup = (group) => {
78
- const index = this.#options.groups.indexOf(group);
79
- if (index === -1) {
80
- this.#options.groups.push(group);
81
- }
82
- };
83
- RemoveGroup = (group) => {
84
- const removeIndex = this.#options.groups.indexOf(group);
85
- if (removeIndex !== -1) {
86
- this.#options.groups.splice(removeIndex, 1);
87
- }
88
- };
89
- SetupPrimary = () => {
90
- const ipcMessageManagerOptions = {
91
- logger: this.#options.logger,
92
- requestResponseMessageTimeout: 5000,
93
- namespace: this.#options.namespace,
94
- role: this.#options.role,
95
- messageSender: this.#messageSender,
96
- groups: this.#options.groups,
97
- // This method is used to calculate if all responses have been received from multiple clients (broadcast)
98
- // returns true/false.
99
- ProcessResponseMessage: this.#ProcessResponseMessage,
100
- // This gets called when an event is received from a message receiver (when ProcessMessage is invoked from the receiver event handler)
101
- ProcessRequestMessage: this.#processPayload,
102
- messageReceiverStart: (options) => {
103
- this.#messagePort.on('message', this.#processRawMessage);
104
- //this.#redisSubscriber.on("message", this.#processRawMessage);
105
- },
106
- messageReceiverStop: (options) => {
107
- this.#messagePort.off("message", this.#processRawMessage);
108
- //this.#redisSubscriber.off("message", this.#processRawMessage);
109
- }
110
- };
111
- this.#ipcMessageManager = new ipcMessageManager_1.IPCMessageManager(ipcMessageManagerOptions);
112
- };
113
- #messageSender = (payload, options) => {
114
- if (payload.messageType.localeCompare('REQUEST') === 0) {
115
- //this.#redisPublisher.publish(this.#requestChannel, JSON.stringify(payload));
116
- this.#messagePort.postMessage(JSON.stringify(payload));
117
- }
118
- else if (payload.messageType.localeCompare('RESPONSE') === 0) {
119
- this.#messagePort.postMessage(JSON.stringify(payload));
120
- //this.#redisPublisher.publish(this.#responseChannel, JSON.stringify(payload));
121
- }
122
- };
123
- #ProcessResponseMessage = async (responses, options) => {
124
- // Now check if we have all responses ...
125
- let allFound = false;
126
- for (const [responseId, response] of Object.entries(responses)) {
127
- if (response.senderRole.localeCompare('CLIENT') === 0) {
128
- allFound = true;
129
- break;
130
- }
131
- }
132
- if (allFound) {
133
- return allFound;
134
- }
135
- let found = true;
136
- // Sender role here is SERVER
137
- let requestGroup = null;
138
- for (const [responseId, response] of Object.entries(responses)) {
139
- if (response.requestPayload.args.length > 0 && response.requestPayload.args[0].group) {
140
- requestGroup = response.requestPayload.args[0].group;
141
- break;
142
- }
143
- }
144
- if (requestGroup) {
145
- const clientsInGroup = Object.values(this.#clients).filter(c => {
146
- if (c.groups.indexOf(requestGroup) === -1) {
147
- return false;
148
- }
149
- return true;
150
- });
151
- // Now make sure that all clients are in the responses
152
- found = true;
153
- clientsInGroup.forEach(c => {
154
- if (!responses[c.id]) {
155
- found = false;
156
- }
157
- });
158
- }
159
- else {
160
- const clientsInGroup = Object.values(this.#clients);
161
- // Now make sure that all clients are in the responses
162
- found = true;
163
- clientsInGroup.forEach(c => {
164
- if (!responses[c.id]) {
165
- found = false;
166
- }
167
- });
168
- }
169
- return found;
170
- };
171
- #processPayload = (payload, options) => {
172
- // check the event name from the collection and invoke that function
173
- return new Promise((resolve, reject) => {
174
- if (payload.messageType.localeCompare('REQUEST') === 0) {
175
- if (payload.requestPayload['__eventName']) {
176
- const eventName = payload.requestPayload['__eventName'];
177
- // Only process events that I have registered interest in (using .on)
178
- if (this.#events[eventName]) {
179
- try {
180
- //const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
181
- this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage) => {
182
- resolve(responseMessage);
183
- });
184
- }
185
- catch (error) {
186
- reject(error);
187
- }
188
- }
189
- }
190
- }
191
- });
192
- };
193
- // p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
194
- on(event, callback, ctx) {
195
- if (this.#events[event]) {
196
- // Update the event with the same name
197
- delete this.#events[event];
198
- }
199
- const eventObject = {
200
- event,
201
- callback,
202
- ctx
203
- };
204
- this.#events[eventObject.event] = eventObject;
205
- return this;
206
- }
207
- off(event, callback) {
208
- if (this.#events[event]) {
209
- delete this.#events[event];
210
- }
211
- return this;
212
- }
213
- Start = () => {
214
- this.#ipcMessageManager?.Start();
215
- };
216
- Stop = () => {
217
- if (this.#pingTimeout) {
218
- clearTimeout(this.#pingTimeout);
219
- this.#pingTimeout = null;
220
- }
221
- this.#ipcMessageManager?.Stop();
222
- /*
223
- this.#redisSubscriber.quit();
224
- this.#redisSubscriber.disconnect();
225
-
226
- this.#redisPublisher.quit();
227
- this.#redisPublisher.disconnect();
228
- */
229
- };
230
- emit(event, ...args) {
231
- (async () => {
232
- try {
233
- const retVal = await this.#ipcMessageManager?.SendMessage({
234
- __eventName: event,
235
- args: args.slice(0, args.length - 1)
236
- });
237
- // Invoke the response callback
238
- args[args.length - 1](retVal);
239
- }
240
- catch (error) {
241
- if (this.#options.ignoreEvents) {
242
- if (this.#options.ignoreEvents.indexOf(error.__eventName) !== -1) {
243
- return;
244
- }
245
- }
246
- this.#options.logger.error(chalk_1.default.red(`RedisMessageHandler:emit(): Error: [${JSON.stringify(error)}]`));
247
- }
248
- })();
249
- return this;
250
- }
251
- emitWithError(event, args, responseCb, errorCb) {
252
- (async () => {
253
- try {
254
- const retVal = await this.#ipcMessageManager?.SendMessage({
255
- __eventName: event,
256
- args: [args]
257
- });
258
- // Invoke the response callback
259
- responseCb(retVal);
260
- }
261
- catch (error) {
262
- if (this.#options.ignoreEvents) {
263
- if (this.#options.ignoreEvents.indexOf(error.__eventName) !== -1) {
264
- return;
265
- }
266
- }
267
- errorCb(error);
268
- }
269
- })();
270
- return this;
271
- }
272
- emitex = async (event, ...args) => {
273
- return this.#ipcMessageManager.SendMessage({
274
- __eventName: event,
275
- args
276
- });
277
- };
278
- }
279
- exports.WebWorkerMessageHandler = WebWorkerMessageHandler;
280
- //# sourceMappingURL=webWorkerMessageHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webWorkerMessageHandler.js","sourceRoot":"","sources":["../../src/messagehandling/webWorkerMessageHandler.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
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.WorkerSupport = void 0;
7
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF */ // --> OFF
8
- const worker_threads_1 = require("worker_threads");
9
- const webWorkerMessageHandler_1 = require("./webWorkerMessageHandler");
10
- const stsutils_1 = require("@nsshunt/stsutils");
11
- const chalk_1 = __importDefault(require("chalk"));
12
- class WorkerSupport {
13
- #wwClient = null;
14
- constructor() {
15
- this.#wwClient = new webWorkerMessageHandler_1.WebWorkerMessageHandler({
16
- logger: stsutils_1.defaultLogger,
17
- role: 'CLIENT',
18
- namespace: 'mytestapp',
19
- groups: [],
20
- ignoreEvents: ['ping'],
21
- messagePort: worker_threads_1.parentPort
22
- });
23
- this.#wwClient.Start();
24
- this.#wwClient.on('test', (arg1, callback) => {
25
- callback({
26
- status: `PID: [${process.pid}]: response message from event = test with args ${JSON.stringify(arg1)}`
27
- });
28
- });
29
- this.#wwClient.on('globalmessage', (arg1, callback) => {
30
- callback({
31
- status: `PID: [${process.pid}]: response message from event = globalmessage with args ${JSON.stringify(arg1)}`
32
- });
33
- });
34
- setTimeout(async () => {
35
- const sendObj1 = { from: 'child1' };
36
- console.log(chalk_1.default.magenta(`calling globalmessage = [${JSON.stringify(sendObj1)}]`));
37
- const retVal1 = await this.#wwClient?.emitex('globalmessage', sendObj1);
38
- console.log(chalk_1.default.magenta(`caller response from globalmessage = [${JSON.stringify(retVal1)}]`));
39
- const sendObj2 = { from: 'child2' };
40
- console.log(chalk_1.default.magenta(`calling test = [${JSON.stringify(sendObj2)}]`));
41
- const retVal2 = await this.#wwClient?.emitex('test', sendObj2);
42
- console.log(chalk_1.default.magenta(`caller response from test = [${JSON.stringify(retVal2)}]`));
43
- }, 2000);
44
- }
45
- ProcessMessage = async (data) => {
46
- console.log(`Received: [${data}]`);
47
- //parentPort?.postMessage(data);
48
- };
49
- }
50
- exports.WorkerSupport = WorkerSupport;
51
- new WorkerSupport();
52
- /*
53
- parentPort?.on('message', (data: any) => {
54
- if (isNode) {
55
- worker.ProcessMessage(data);
56
- } else {
57
- // const payloadMessage: IIWMessagePayload = data.data as IIWMessagePayload; // browser version
58
- worker.ProcessMessage(data.data); // browser version
59
- }
60
- });
61
- */
62
- //# sourceMappingURL=webWorkerSupport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webWorkerSupport.js","sourceRoot":"","sources":["../../src/messagehandling/webWorkerSupport.ts"],"names":[],"mappings":";;;;;;AAAA,wFAAwF,CAAE,yBAAyB;AACnH,mDAAyD;AAEzD,uEAAmE;AAEnE,gDAA6D;AAE7D,kDAA0B;AAE1B,MAAa,aAAa;IACtB,SAAS,GAAmC,IAAI,CAAC;IAEjD;QACI,IAAI,CAAC,SAAS,GAAG,IAAI,iDAAuB,CAAC;YACzC,MAAM,EAAE,wBAAa;YACrB,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,EAAG;YACX,YAAY,EAAE,CAAE,MAAM,CAAE;YACxB,WAAW,EAAE,2BAAyB;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAgB,EAAE,QAAa,EAAE,EAAE;YAC1D,QAAQ,CAAE;gBACN,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG,mDAAmD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACxG,CAAC,CAAA;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAgB,EAAE,QAAa,EAAE,EAAE;YACnE,QAAQ,CAAE;gBACN,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG,4DAA4D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACjH,CAAC,CAAA;QACN,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACpF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhG,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3F,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;IAED,cAAc,GAAG,KAAK,EAAC,IAAS,EAAE,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;QACnC,gCAAgC;IACpC,CAAC,CAAA;CACJ;AA3CD,sCA2CC;AAED,IAAI,aAAa,EAAE,CAAC;AAEpB;;;;;;;;;EASE"}
@@ -1,305 +0,0 @@
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
- const pingData = {
50
- id: this.#ipcMessageManager.id,
51
- groups: this.#options.groups,
52
- };
53
- if (this.#options.processOptions) {
54
- pingData.serviceProcessContext = this.#options.processOptions.serviceProcessContext;
55
- }
56
- this.emit('ping', pingData, (response) => { });
57
- ping();
58
- }, 1000).unref();
59
- };
60
- ping();
61
- }
62
- else {
63
- this.on('ping', (pingData, callback) => {
64
- const { id, groups, serviceProcessContext } = pingData;
65
- if (this.#clients[id]) {
66
- clearTimeout(this.#clients[id].timeout);
67
- this.#clients[id].pingCount++;
68
- this.#clients[id].timeout = setTimeout(() => {
69
- delete this.#clients[id];
70
- }, 2000);
71
- this.#clients[id].groups = groups;
72
- this.#clients[id].serviceProcessContext = serviceProcessContext;
73
- }
74
- else {
75
- this.#clients[id] = {
76
- id,
77
- clientConnected: new Date(),
78
- pingCount: 0,
79
- timeout: setTimeout(() => {
80
- delete this.#clients[id];
81
- }, 2000),
82
- groups,
83
- serviceProcessContext
84
- };
85
- }
86
- callback('ok');
87
- });
88
- }
89
- }
90
- #LogInfo(message) {
91
- this.#options.logger.info(message);
92
- }
93
- #LogError(message) {
94
- this.#options.logger.error(message);
95
- }
96
- #processRawMessage = (channel, rawmessage) => {
97
- const message = JSON.parse(rawmessage);
98
- this.#ipcMessageManager?.ProcessMessage(message, { channel });
99
- };
100
- get clients() {
101
- return this.#clients;
102
- }
103
- get groups() {
104
- return this.#options.groups;
105
- }
106
- AddGroup = (group) => {
107
- const index = this.#options.groups.indexOf(group);
108
- if (index === -1) {
109
- this.#options.groups.push(group);
110
- }
111
- };
112
- RemoveGroup = (group) => {
113
- const removeIndex = this.#options.groups.indexOf(group);
114
- if (removeIndex !== -1) {
115
- this.#options.groups.splice(removeIndex, 1);
116
- }
117
- };
118
- SetupPrimary = () => {
119
- const ipcMessageManagerOptions = {
120
- logger: this.#options.logger,
121
- requestResponseMessageTimeout: 5000,
122
- namespace: this.#options.namespace,
123
- role: this.#options.role,
124
- messageSender: this.#messageSender,
125
- groups: this.#options.groups,
126
- // This method is used to calculate if all responses have been received from multiple clients (broadcast)
127
- // returns true/false.
128
- ProcessResponseMessage: this.#ProcessResponseMessage,
129
- // This gets called when an event is received from a message receiver (when ProcessMessage is invoked from the receiver event handler)
130
- ProcessRequestMessage: this.#processPayload,
131
- messageReceiverStart: (options) => {
132
- this.#redisSubscriber.on("message", this.#processRawMessage);
133
- },
134
- messageReceiverStop: (options) => {
135
- this.#redisSubscriber.off("message", this.#processRawMessage);
136
- }
137
- };
138
- this.#ipcMessageManager = new ipcMessageManager_1.IPCMessageManager(ipcMessageManagerOptions);
139
- };
140
- #messageSender = (payload, options) => {
141
- if (payload.messageType.localeCompare('REQUEST') === 0) {
142
- this.#redisPublisher.publish(this.#requestChannel, JSON.stringify(payload));
143
- }
144
- else if (payload.messageType.localeCompare('RESPONSE') === 0) {
145
- this.#redisPublisher.publish(this.#responseChannel, JSON.stringify(payload));
146
- }
147
- };
148
- #ProcessResponseMessage = async (responses, options) => {
149
- // Now check if we have all responses ...
150
- let allFound = false;
151
- for (const [responseId, response] of Object.entries(responses)) {
152
- if (response.senderRole.localeCompare('CLIENT') === 0) {
153
- allFound = true;
154
- break;
155
- }
156
- }
157
- if (allFound) {
158
- return allFound;
159
- }
160
- let found = true;
161
- // Sender role here is SERVER
162
- let requestGroup = null;
163
- for (const [responseId, response] of Object.entries(responses)) {
164
- if (response.requestPayload.args.length > 0 && response.requestPayload.args[0].group) {
165
- requestGroup = response.requestPayload.args[0].group;
166
- break;
167
- }
168
- }
169
- if (requestGroup) {
170
- const clientsInGroup = Object.values(this.#clients).filter(c => {
171
- if (c.groups.indexOf(requestGroup) === -1) {
172
- return false;
173
- }
174
- return true;
175
- });
176
- // Now make sure that all clients are in the responses
177
- found = true;
178
- clientsInGroup.forEach(c => {
179
- if (!responses[c.id]) {
180
- found = false;
181
- }
182
- });
183
- }
184
- else {
185
- const clientsInGroup = Object.values(this.#clients);
186
- // Now make sure that all clients are in the responses
187
- found = true;
188
- clientsInGroup.forEach(c => {
189
- if (!responses[c.id]) {
190
- found = false;
191
- }
192
- });
193
- }
194
- return found;
195
- };
196
- #processPayload = (payload, options) => {
197
- // check the event name from the collection and invoke that function
198
- return new Promise((resolve, reject) => {
199
- if (payload.messageType.localeCompare('REQUEST') === 0) {
200
- if (payload.requestPayload['__eventName']) {
201
- const eventName = payload.requestPayload['__eventName'];
202
- // Only process events that I have registered interest in (using .on)
203
- if (this.#events[eventName]) {
204
- try {
205
- //const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
206
- this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage) => {
207
- resolve(responseMessage);
208
- });
209
- }
210
- catch (error) {
211
- reject(error);
212
- }
213
- }
214
- }
215
- }
216
- });
217
- };
218
- // p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
219
- on(event, callback, ctx) {
220
- if (this.#events[event]) {
221
- // Update the event with the same name
222
- delete this.#events[event];
223
- }
224
- const eventObject = {
225
- event,
226
- callback,
227
- ctx
228
- };
229
- this.#events[eventObject.event] = eventObject;
230
- return this;
231
- }
232
- off(event, callback) {
233
- if (this.#events[event]) {
234
- delete this.#events[event];
235
- }
236
- return this;
237
- }
238
- Start = () => {
239
- this.#ipcMessageManager?.Start();
240
- };
241
- Stop = () => {
242
- if (this.#pingTimeout) {
243
- clearTimeout(this.#pingTimeout);
244
- this.#pingTimeout = null;
245
- }
246
- this.#ipcMessageManager?.Stop();
247
- this.#redisSubscriber.quit();
248
- this.#redisSubscriber.disconnect();
249
- this.#redisPublisher.quit();
250
- this.#redisPublisher.disconnect();
251
- };
252
- emit(event, ...args) {
253
- (async () => {
254
- try {
255
- const retVal = await this.#ipcMessageManager?.SendMessage({
256
- __eventName: event,
257
- args: args.slice(0, args.length - 1)
258
- });
259
- // Invoke the response callback
260
- args[args.length - 1](retVal);
261
- }
262
- catch (error) {
263
- if (this.#options.ignoreEvents) {
264
- //console.log(chalk.red(`RedisMessageHandler:emit(): ignoreEvents: [${this.#options.ignoreEvents}]`))
265
- if (this.#options.ignoreEvents.indexOf(error.__eventName) !== -1) {
266
- return;
267
- }
268
- }
269
- this.#options.logger.error(chalk_1.default.red(`RedisMessageHandler:emit(): Error: [${JSON.stringify(error)}]`));
270
- }
271
- })();
272
- return this;
273
- }
274
- emitWithError(event, args, responseCb, errorCb) {
275
- (async () => {
276
- try {
277
- const retVal = await this.#ipcMessageManager?.SendMessage({
278
- __eventName: event,
279
- args: [args]
280
- });
281
- // Invoke the response callback
282
- responseCb(retVal);
283
- }
284
- catch (error) {
285
- if (this.#options.ignoreEvents) {
286
- //console.log(chalk.red(`RedisMessageHandler:emit(): ignoreEvents: [${this.#options.ignoreEvents}]`))
287
- if (this.#options.ignoreEvents.indexOf(error.__eventName) !== -1) {
288
- return;
289
- }
290
- }
291
- //this.#options.logger.error(chalk.red(`RedisMessageHandler:emit(): Error: [${JSON.stringify(error)}]`));
292
- errorCb(error);
293
- }
294
- })();
295
- return this;
296
- }
297
- emitex = async (event, ...args) => {
298
- return this.#ipcMessageManager.SendMessage({
299
- __eventName: event,
300
- args
301
- });
302
- };
303
- }
304
- exports.RedisMessageHandler = RedisMessageHandler;
305
- //# sourceMappingURL=redisMessageHandler.js.map