@futdevpro/nts-dynamo 1.9.26 → 1.9.28
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/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +1 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts +2 -0
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +34 -20
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/interfaces/global-log-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/mock/socket-client.mock.d.ts +4 -4
- package/build/_modules/mock/socket-client.mock.d.ts.map +1 -1
- package/build/_modules/mock/socket-client.mock.js +4 -5
- package/build/_modules/mock/socket-client.mock.js.map +1 -1
- package/build/_modules/mock/socket-server.mock.d.ts +3 -3
- package/build/_modules/mock/socket-server.mock.d.ts.map +1 -1
- package/build/_modules/mock/socket-server.mock.js +2 -2
- package/build/_modules/mock/socket-server.mock.js.map +1 -1
- package/build/_modules/socket/_models/socket-client-service-params.control-model.d.ts +2 -8
- package/build/_modules/socket/_models/socket-client-service-params.control-model.d.ts.map +1 -1
- package/build/_modules/socket/_models/socket-client-service-params.control-model.js +4 -12
- package/build/_modules/socket/_models/socket-client-service-params.control-model.js.map +1 -1
- package/build/_modules/socket/_models/socket-presence.control-model.d.ts +5 -4
- package/build/_modules/socket/_models/socket-presence.control-model.d.ts.map +1 -1
- package/build/_modules/socket/_models/socket-presence.control-model.js +10 -8
- package/build/_modules/socket/_models/socket-presence.control-model.js.map +1 -1
- package/build/_modules/socket/_services/socket-client.service.d.ts +6 -6
- package/build/_modules/socket/_services/socket-client.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-client.service.js +20 -17
- package/build/_modules/socket/_services/socket-client.service.js.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.d.ts +18 -18
- package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js +79 -68
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_modules/socket/index.d.ts +0 -2
- package/build/_modules/socket/index.d.ts.map +1 -1
- package/build/_modules/socket/index.js +0 -2
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_modules/usage/usage.data-service.js +1 -1
- package/build/_modules/usage/usage.data-service.js.map +1 -1
- package/build/_services/base/data.service.js +4 -4
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.js +3 -3
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/core/email.service.js +1 -1
- package/build/_services/core/email.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts +1 -1
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +1 -1
- package/build/_services/server/app.server.js.map +1 -1
- package/package.json +9 -19
- package/src/_collections/global-settings.const.ts +1 -0
- package/src/_models/control-models/endpoint-params.control-model.ts +51 -31
- package/src/_models/interfaces/global-log-settings.interface.ts +5 -0
- package/src/_modules/mock/socket-client.mock.ts +7 -7
- package/src/_modules/mock/socket-server.mock.ts +5 -4
- package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +6 -15
- package/src/_modules/socket/_models/socket-presence.control-model.ts +13 -11
- package/src/_modules/socket/_services/socket-client.service.ts +30 -23
- package/src/_modules/socket/_services/socket-server.service.ts +129 -109
- package/src/_modules/socket/index.ts +0 -2
- package/src/_modules/usage/usage.data-service.ts +1 -1
- package/src/_services/base/data.service.ts +4 -4
- package/src/_services/base/db.service.ts +3 -3
- package/src/_services/core/email.service.ts +1 -1
- package/src/_services/server/app.server.ts +2 -2
- package/build/_modules/socket/_enums/socket-event-key.enum.d.ts +0 -15
- package/build/_modules/socket/_enums/socket-event-key.enum.d.ts.map +0 -1
- package/build/_modules/socket/_enums/socket-event-key.enum.js +0 -19
- package/build/_modules/socket/_enums/socket-event-key.enum.js.map +0 -1
- package/build/_modules/socket/_models/socket-event.control-model.d.ts +0 -61
- package/build/_modules/socket/_models/socket-event.control-model.d.ts.map +0 -1
- package/build/_modules/socket/_models/socket-event.control-model.js +0 -90
- package/build/_modules/socket/_models/socket-event.control-model.js.map +0 -1
- package/src/_modules/socket/_enums/socket-event-key.enum.ts +0 -18
- package/src/_modules/socket/_models/socket-event.control-model.ts +0 -150
|
@@ -5,8 +5,13 @@ import {
|
|
|
5
5
|
DyFM_AnyError, DyFM_Array, DyFM_Error, DyFM_Error_Settings, DyFM_Log
|
|
6
6
|
} from '@futdevpro/fsm-dynamo';
|
|
7
7
|
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
DyFM_SocketEvent_Key, DyFM_SocketEventPreprocessTask, DyFM_SocketEventTask, DyFM_SocketEvent
|
|
11
|
+
} from '@futdevpro/fsm-dynamo/socket';
|
|
12
|
+
|
|
13
|
+
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
8
14
|
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
9
|
-
import { DyNTS_SocketEventKey } from '../_enums/socket-event-key.enum';
|
|
10
15
|
import { DyNTS_SocketSecurity } from '../_enums/socket-security.enum';
|
|
11
16
|
import {
|
|
12
17
|
DyNTS_SocketServerService_Params
|
|
@@ -14,19 +19,15 @@ import {
|
|
|
14
19
|
import {
|
|
15
20
|
DyNTS_SocketPresence
|
|
16
21
|
} from '../_models/socket-presence.control-model';
|
|
17
|
-
import {
|
|
18
|
-
DyNTS_SocketEvent, DyNTS_SocketEventPreprocessTask, DyNTS_SocketEventTask
|
|
19
|
-
} from '../_models/socket-event.control-model';
|
|
20
|
-
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* You need to define the following functions:
|
|
24
25
|
* ```ts
|
|
25
26
|
* getServiceParams(): DyNTS_SocketServerServiceParams;
|
|
26
27
|
*
|
|
27
|
-
* getIncomingEvents():
|
|
28
|
+
* getIncomingEvents(): DyFM_SocketEvent<any>[];
|
|
28
29
|
*
|
|
29
|
-
*
|
|
30
|
+
* getPresenceFromSubscriptionEventContent(
|
|
30
31
|
* socketSubscription: T_SubscriptionContent,
|
|
31
32
|
* socket: SocketIO.Socket
|
|
32
33
|
* ): Promise<T_Presence>;
|
|
@@ -47,27 +48,16 @@ export abstract class DyNTS_SocketServerService<
|
|
|
47
48
|
protected openSocketServer: SocketIO.Server;
|
|
48
49
|
protected secureSocketServer: SocketIO.Server;
|
|
49
50
|
|
|
50
|
-
private connectEvent:
|
|
51
|
-
protected incomingEvents:
|
|
51
|
+
private connectEvent: DyFM_SocketEvent<SocketIO.Socket>;
|
|
52
|
+
protected incomingEvents: DyFM_SocketEvent<any>[];
|
|
52
53
|
|
|
53
|
-
private subscriptionEvent:
|
|
54
|
-
private unsubscribeEvent:
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* You need to setup a function that converts subscription event content to presence.
|
|
58
|
-
* You should do authentication and authorization here.
|
|
59
|
-
*/
|
|
60
|
-
protected abstract getPresenceFromSubscrioptionEventContent(
|
|
61
|
-
socketSubscription: T_SubscriptionContent, socket: SocketIO.Socket
|
|
62
|
-
): Promise<T_Presence>;
|
|
54
|
+
private subscriptionEvent: DyFM_SocketEvent<any>;
|
|
55
|
+
private unsubscribeEvent: DyFM_SocketEvent<any>;
|
|
56
|
+
|
|
63
57
|
protected presences: T_Presence[] = [];
|
|
64
58
|
|
|
65
|
-
get logSetup(): boolean {
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
get highDetailedLogs(): boolean {
|
|
69
|
-
return DyNTS_global_settings.log_settings.highDetailedLogs;
|
|
70
|
-
}
|
|
59
|
+
get logSetup(): boolean { return DyNTS_global_settings.log_settings.setup; }
|
|
60
|
+
get highDetailedLogs(): boolean { return DyNTS_global_settings.log_settings.highDetailedLogs; }
|
|
71
61
|
|
|
72
62
|
defaultErrorUserMsg =
|
|
73
63
|
`We encountered an unhandled Socket Server Error, ` +
|
|
@@ -84,6 +74,15 @@ export abstract class DyNTS_SocketServerService<
|
|
|
84
74
|
});
|
|
85
75
|
}
|
|
86
76
|
|
|
77
|
+
/**
|
|
78
|
+
* You need to setup a function that converts subscription event content to presence.
|
|
79
|
+
* You should do authentication and authorization here.
|
|
80
|
+
*/
|
|
81
|
+
protected abstract getPresenceFromSubscriptionEventContent(
|
|
82
|
+
socketSubscription: T_SubscriptionContent,
|
|
83
|
+
socket: SocketIO.Socket
|
|
84
|
+
): Promise<T_Presence>;
|
|
85
|
+
|
|
87
86
|
private async asyncConstructor(): Promise<void> {
|
|
88
87
|
try {
|
|
89
88
|
this.params = this.getServiceParams();
|
|
@@ -93,7 +92,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
93
92
|
|
|
94
93
|
if (this.logSetup) console.log(
|
|
95
94
|
`Socket Server Service setup done: ${this.params.name} (${this.params.port}) ` +
|
|
96
|
-
`
|
|
95
|
+
`security: ${this.params.security}\n`
|
|
97
96
|
);
|
|
98
97
|
} catch (error) {
|
|
99
98
|
DyFM_Log.error(
|
|
@@ -115,25 +114,25 @@ export abstract class DyNTS_SocketServerService<
|
|
|
115
114
|
try {
|
|
116
115
|
/** Setup connect event */
|
|
117
116
|
const connectEventIndex = this.incomingEvents.findIndex(
|
|
118
|
-
(event:
|
|
119
|
-
event.eventKey ===
|
|
117
|
+
(event: DyFM_SocketEvent<any>) =>
|
|
118
|
+
event.eventKey === DyFM_SocketEvent_Key.connection
|
|
120
119
|
);
|
|
121
120
|
|
|
122
121
|
if (0 <= connectEventIndex) {
|
|
123
122
|
this.connectEvent = this.incomingEvents.splice(connectEventIndex)[0];
|
|
124
123
|
} else {
|
|
125
|
-
this.connectEvent = new
|
|
126
|
-
eventKey:
|
|
124
|
+
this.connectEvent = new DyFM_SocketEvent({
|
|
125
|
+
eventKey: DyFM_SocketEvent_Key.connection,
|
|
127
126
|
});
|
|
128
127
|
}
|
|
129
128
|
this.connectEvent.serviceName = this.params.name;
|
|
130
129
|
|
|
131
130
|
/** Setup subscriptions events */
|
|
132
|
-
if (this.
|
|
131
|
+
if (this.getPresenceFromSubscriptionEventContent) {
|
|
133
132
|
/** Setup subscription event */
|
|
134
133
|
const subscriptionEventIndex = this.incomingEvents.findIndex(
|
|
135
|
-
(event:
|
|
136
|
-
event.eventKey ===
|
|
134
|
+
(event: DyFM_SocketEvent<any>) =>
|
|
135
|
+
event.eventKey === DyFM_SocketEvent_Key.subscribe
|
|
137
136
|
);
|
|
138
137
|
|
|
139
138
|
if (0 <= subscriptionEventIndex) {
|
|
@@ -144,13 +143,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
144
143
|
`${this.params.name} (${this.params.port})`
|
|
145
144
|
);
|
|
146
145
|
} else {
|
|
147
|
-
this.subscriptionEvent = new
|
|
148
|
-
eventKey:
|
|
146
|
+
this.subscriptionEvent = new DyFM_SocketEvent<T_SubscriptionContent>({
|
|
147
|
+
eventKey: DyFM_SocketEvent_Key.subscribe,
|
|
149
148
|
});
|
|
150
149
|
}
|
|
151
150
|
|
|
152
|
-
if (this.
|
|
153
|
-
this.subscriptionEvent.preProcesses.push(...this.
|
|
151
|
+
if (this.getSubscriptionPreProcesses) {
|
|
152
|
+
this.subscriptionEvent.preProcesses.push(...this.getSubscriptionPreProcesses());
|
|
154
153
|
}
|
|
155
154
|
|
|
156
155
|
if (this.getSubscriptionTasks) {
|
|
@@ -160,8 +159,8 @@ export abstract class DyNTS_SocketServerService<
|
|
|
160
159
|
|
|
161
160
|
/** Setup subscription event */
|
|
162
161
|
const unsubscribeEventIndex = this.incomingEvents.findIndex(
|
|
163
|
-
(event:
|
|
164
|
-
event.eventKey ===
|
|
162
|
+
(event: DyFM_SocketEvent<any>) =>
|
|
163
|
+
event.eventKey === DyFM_SocketEvent_Key.unsubscribe
|
|
165
164
|
);
|
|
166
165
|
|
|
167
166
|
if (0 <= unsubscribeEventIndex) {
|
|
@@ -172,13 +171,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
172
171
|
`${this.params.name} (${this.params.port})`
|
|
173
172
|
);
|
|
174
173
|
} else {
|
|
175
|
-
this.unsubscribeEvent = new
|
|
176
|
-
eventKey:
|
|
174
|
+
this.unsubscribeEvent = new DyFM_SocketEvent<T_SubscriptionContent>({
|
|
175
|
+
eventKey: DyFM_SocketEvent_Key.unsubscribe,
|
|
177
176
|
});
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
if (this.
|
|
181
|
-
this.unsubscribeEvent.preProcesses.push(...this.
|
|
179
|
+
if (this.getUnsubscribePreProcesses) {
|
|
180
|
+
this.unsubscribeEvent.preProcesses.push(...this.getUnsubscribePreProcesses());
|
|
182
181
|
}
|
|
183
182
|
|
|
184
183
|
if (this.getUnsubscribeTasks) {
|
|
@@ -188,8 +187,8 @@ export abstract class DyNTS_SocketServerService<
|
|
|
188
187
|
|
|
189
188
|
/** Setup disconnect event */
|
|
190
189
|
const disconnectEventIndex = this.incomingEvents.findIndex(
|
|
191
|
-
(event:
|
|
192
|
-
event.eventKey ===
|
|
190
|
+
(event: DyFM_SocketEvent<any>) =>
|
|
191
|
+
event.eventKey === DyFM_SocketEvent_Key.disconnect
|
|
193
192
|
);
|
|
194
193
|
|
|
195
194
|
if (0 <= disconnectEventIndex) {
|
|
@@ -197,9 +196,9 @@ export abstract class DyNTS_SocketServerService<
|
|
|
197
196
|
this.incomingEvents[disconnectEventIndex].tasks.push(this.disconnectBaseTask);
|
|
198
197
|
} else {
|
|
199
198
|
this.incomingEvents.push(
|
|
200
|
-
new
|
|
199
|
+
new DyFM_SocketEvent({
|
|
201
200
|
serviceName: this.params.name,
|
|
202
|
-
eventKey:
|
|
201
|
+
eventKey: DyFM_SocketEvent_Key.disconnect,
|
|
203
202
|
tasks: [
|
|
204
203
|
this.disconnectBaseTask,
|
|
205
204
|
],
|
|
@@ -209,13 +208,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
209
208
|
|
|
210
209
|
/** Setup error event */
|
|
211
210
|
const errorEventIndex = this.incomingEvents.findIndex(
|
|
212
|
-
(event:
|
|
211
|
+
(event: DyFM_SocketEvent<any>) => event.eventKey === DyFM_SocketEvent_Key.error
|
|
213
212
|
);
|
|
214
213
|
|
|
215
214
|
if (errorEventIndex == -1 && this.errorHandling) {
|
|
216
|
-
this.incomingEvents.push(new
|
|
215
|
+
this.incomingEvents.push(new DyFM_SocketEvent<T_ErrorContent>({
|
|
217
216
|
serviceName: this.params.name,
|
|
218
|
-
eventKey:
|
|
217
|
+
eventKey: DyFM_SocketEvent_Key.error,
|
|
219
218
|
tasks: [
|
|
220
219
|
this.errorHandling,
|
|
221
220
|
],
|
|
@@ -225,13 +224,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
225
224
|
this.subscriptionEvent.socketName = this.params.name;
|
|
226
225
|
} else {
|
|
227
226
|
DyFM_Log.error(
|
|
228
|
-
'
|
|
227
|
+
'getPresenceFromSubscriptionEventContent is not set',
|
|
229
228
|
`${this.params.name} (${this.params.port})`
|
|
230
229
|
);
|
|
231
230
|
}
|
|
232
231
|
|
|
233
232
|
/** Set incoming events serviceName */
|
|
234
|
-
this.incomingEvents.forEach((event:
|
|
233
|
+
this.incomingEvents.forEach((event: DyFM_SocketEvent<any>) => {
|
|
235
234
|
event.serviceName = this.params.name;
|
|
236
235
|
});
|
|
237
236
|
} catch (error) {
|
|
@@ -254,47 +253,47 @@ export abstract class DyNTS_SocketServerService<
|
|
|
254
253
|
try {
|
|
255
254
|
if (this.highDetailedLogs) console.log('\nfn:. setupSocketServer');
|
|
256
255
|
|
|
257
|
-
newSocketServer.on(
|
|
256
|
+
newSocketServer.on(DyFM_SocketEvent_Key.connection, async (socket: SocketIO.Socket) => {
|
|
258
257
|
try {
|
|
259
258
|
let issuer: string;
|
|
260
259
|
|
|
261
260
|
await this.connectEvent.executeEventTasks(socket);
|
|
262
261
|
|
|
263
|
-
if (this.
|
|
262
|
+
if (this.getPresenceFromSubscriptionEventContent) {
|
|
264
263
|
socket.on(
|
|
265
|
-
|
|
264
|
+
DyFM_SocketEvent_Key.subscribe,
|
|
266
265
|
async (content: any) => {
|
|
267
266
|
try {
|
|
268
267
|
/**
|
|
269
268
|
* usually socket logs are in event.executeEventTasks(),
|
|
270
269
|
* but subscribe event is an exception from this,
|
|
271
|
-
* to be able to check content before
|
|
270
|
+
* to be able to check content before getPresenceFromSubscriptionEventContent
|
|
272
271
|
*/
|
|
273
272
|
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
274
273
|
DyFM_Log.log(
|
|
275
274
|
`--=> incoming socket(${this.params.name}) ` +
|
|
276
|
-
`event: ${
|
|
275
|
+
`event: ${DyFM_SocketEvent_Key.subscribe};` +
|
|
277
276
|
`\ncontent:`, content
|
|
278
277
|
);
|
|
279
278
|
} else {
|
|
280
279
|
DyFM_Log.log(
|
|
281
280
|
`--=> incoming socket(${this.params.name}) ` +
|
|
282
|
-
`event: ${
|
|
281
|
+
`event: ${DyFM_SocketEvent_Key.subscribe}`
|
|
283
282
|
);
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
const presence: T_Presence = await this.
|
|
285
|
+
const presence: T_Presence = await this.getPresenceFromSubscriptionEventContent(
|
|
287
286
|
content, socket
|
|
288
287
|
);
|
|
289
288
|
|
|
290
289
|
presence.serviceName = this.params.name;
|
|
291
|
-
issuer = presence.
|
|
290
|
+
issuer = presence.issuerLocalId;
|
|
292
291
|
|
|
293
292
|
this.addSocketToPresence(presence);
|
|
294
293
|
await this.subscriptionEvent.executeEventTasks(content, issuer);
|
|
295
294
|
|
|
296
295
|
socket.emit(
|
|
297
|
-
|
|
296
|
+
DyFM_SocketEvent_Key.subscriptionSuccessful,
|
|
298
297
|
'subscribe was successful',
|
|
299
298
|
error => {
|
|
300
299
|
DyFM_Log.error(
|
|
@@ -305,48 +304,55 @@ export abstract class DyNTS_SocketServerService<
|
|
|
305
304
|
);
|
|
306
305
|
|
|
307
306
|
DyFM_Log.success(
|
|
308
|
-
`<-==> socket(${this.params.name}) subscription
|
|
307
|
+
`<-==> socket(${this.params.name}) subscription successful (${issuer})`
|
|
309
308
|
);
|
|
310
309
|
} catch (error) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
310
|
+
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
311
|
+
DyFM_Log.error(
|
|
312
|
+
`Socket Subscription failed: ${this.params.name} ` ,
|
|
313
|
+
`(${this.params.port}) will disconnect now...`,
|
|
314
|
+
error
|
|
315
|
+
);
|
|
316
|
+
} else {
|
|
317
|
+
DyFM_Log.error(
|
|
318
|
+
`Socket Subscription failed: ${this.params.name} ` ,
|
|
319
|
+
`(${this.params.port}) will disconnect now...`
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
socket.emit(DyFM_SocketEvent_Key.error, error);
|
|
317
323
|
socket.disconnect();
|
|
318
324
|
}
|
|
319
325
|
}
|
|
320
326
|
);
|
|
321
327
|
|
|
322
328
|
socket.on(
|
|
323
|
-
|
|
329
|
+
DyFM_SocketEvent_Key.unsubscribe,
|
|
324
330
|
async (issuer: string) => {
|
|
325
331
|
try {
|
|
326
332
|
/**
|
|
327
333
|
* usually socket logs are in event.executeEventTasks(),
|
|
328
334
|
* but unsubscribe event is an exception from this,
|
|
329
|
-
* to be able to check content before
|
|
335
|
+
* to be able to check content before getPresenceFromSubscriptionEventContent
|
|
330
336
|
*/
|
|
331
337
|
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
332
338
|
DyFM_Log.log(
|
|
333
339
|
`--=> incoming socket(${this.params.name}) ` +
|
|
334
|
-
`event: ${
|
|
340
|
+
`event: ${DyFM_SocketEvent_Key.unsubscribe};` +
|
|
335
341
|
`\ncontent:`, issuer
|
|
336
342
|
);
|
|
337
343
|
} else {
|
|
338
344
|
DyFM_Log.log(
|
|
339
345
|
`--=> incoming socket(${this.params.name}) ` +
|
|
340
|
-
`event: ${
|
|
346
|
+
`event: ${DyFM_SocketEvent_Key.unsubscribe}`
|
|
341
347
|
);
|
|
342
348
|
}
|
|
343
349
|
|
|
344
350
|
this.removeSubscription(socket, issuer);
|
|
345
351
|
|
|
346
|
-
await this.
|
|
352
|
+
await this.unsubscribeEvent.executeEventTasks(issuer, issuer);
|
|
347
353
|
|
|
348
354
|
socket.emit(
|
|
349
|
-
|
|
355
|
+
DyFM_SocketEvent_Key.unsubscribeSuccessful,
|
|
350
356
|
'unsubscribe was successful',
|
|
351
357
|
error => {
|
|
352
358
|
DyFM_Log.error(
|
|
@@ -357,21 +363,28 @@ export abstract class DyNTS_SocketServerService<
|
|
|
357
363
|
);
|
|
358
364
|
|
|
359
365
|
DyFM_Log.success(
|
|
360
|
-
`< x > socket(${this.params.name}) unsubscribe
|
|
366
|
+
`< x > socket(${this.params.name}) unsubscribe successful (${issuer})`
|
|
361
367
|
);
|
|
362
368
|
} catch (error) {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
+
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
370
|
+
DyFM_Log.error(
|
|
371
|
+
`Socket unsubscribe failed: ${this.params.name} ` ,
|
|
372
|
+
`(${this.params.port}) will disconnect now...`,
|
|
373
|
+
error
|
|
374
|
+
);
|
|
375
|
+
} else {
|
|
376
|
+
DyFM_Log.error(
|
|
377
|
+
`Socket unsubscribe failed: ${this.params.name} ` ,
|
|
378
|
+
`(${this.params.port}) will disconnect now...`
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
socket.emit(DyFM_SocketEvent_Key.error, error);
|
|
369
382
|
}
|
|
370
383
|
}
|
|
371
384
|
);
|
|
372
385
|
}
|
|
373
386
|
|
|
374
|
-
this.incomingEvents.forEach((event:
|
|
387
|
+
this.incomingEvents.forEach((event: DyFM_SocketEvent<any>) => {
|
|
375
388
|
socket.on(
|
|
376
389
|
event.eventKey,
|
|
377
390
|
async (content: any) => {
|
|
@@ -382,7 +395,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
382
395
|
`Socket Event failed: ${this.params.name} (${this.params.port})`,
|
|
383
396
|
error
|
|
384
397
|
);
|
|
385
|
-
socket.emit(
|
|
398
|
+
socket.emit(DyFM_SocketEvent_Key.error, error);
|
|
386
399
|
}
|
|
387
400
|
}
|
|
388
401
|
);
|
|
@@ -397,7 +410,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
397
410
|
`(${this.params.port}) will disconnect now...`,
|
|
398
411
|
error
|
|
399
412
|
);
|
|
400
|
-
socket.emit(
|
|
413
|
+
socket.emit(DyFM_SocketEvent_Key.error, error);
|
|
401
414
|
socket.disconnect();
|
|
402
415
|
}
|
|
403
416
|
});
|
|
@@ -434,7 +447,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
434
447
|
protected async addSocketToPresence(newPresence: T_Presence): Promise<void> {
|
|
435
448
|
try {
|
|
436
449
|
const activePresence: T_Presence = this.presences.find(
|
|
437
|
-
(pres: T_Presence) => pres.
|
|
450
|
+
(pres: T_Presence) => pres.issuerLocalId === newPresence.issuerLocalId
|
|
438
451
|
);
|
|
439
452
|
|
|
440
453
|
if (activePresence) {
|
|
@@ -443,10 +456,16 @@ export abstract class DyNTS_SocketServerService<
|
|
|
443
456
|
this.presences.push(newPresence);
|
|
444
457
|
}
|
|
445
458
|
} catch (error) {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
459
|
+
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
460
|
+
DyFM_Log.error(
|
|
461
|
+
`Socket Subscription failed: ${this.params?.name} (${this.params?.port})`,
|
|
462
|
+
error
|
|
463
|
+
);
|
|
464
|
+
} else {
|
|
465
|
+
DyFM_Log.error(
|
|
466
|
+
`Socket Subscription failed: ${this.params?.name} (${this.params?.port})`
|
|
467
|
+
);
|
|
468
|
+
}
|
|
450
469
|
|
|
451
470
|
throw error;
|
|
452
471
|
}
|
|
@@ -492,12 +511,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
492
511
|
|
|
493
512
|
const activePresence: DyNTS_SocketPresence = this.presences[activePresenceIndex];
|
|
494
513
|
|
|
495
|
-
if (activePresence.
|
|
514
|
+
if (activePresence.issuerLocalId !== issuer) {
|
|
496
515
|
throw new DyFM_Error({
|
|
497
516
|
...this._getDefaultErrorSettings(
|
|
498
517
|
'sendEventForId',
|
|
499
518
|
new Error(
|
|
500
|
-
`socket subscription for ${issuer} and
|
|
519
|
+
`socket subscription for ${issuer} and ` +
|
|
520
|
+
`${activePresence.issuerLocalId} does not match.`
|
|
501
521
|
),
|
|
502
522
|
issuer
|
|
503
523
|
),
|
|
@@ -527,7 +547,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
527
547
|
if (this.getSubscriptionCloseTasks) {
|
|
528
548
|
await DyFM_Array.asyncForEach(
|
|
529
549
|
this.getSubscriptionCloseTasks(),
|
|
530
|
-
async (task:
|
|
550
|
+
async (task: DyFM_SocketEventTask<null>) => {
|
|
531
551
|
await task(null, issuer);
|
|
532
552
|
}
|
|
533
553
|
);
|
|
@@ -538,7 +558,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
538
558
|
}
|
|
539
559
|
|
|
540
560
|
socket.disconnect();
|
|
541
|
-
DyFM_Log.info(`<x==> socket(${this.params.name}) unsubscription
|
|
561
|
+
DyFM_Log.info(`<x==> socket(${this.params.name}) unsubscription successful (${issuer})`);
|
|
542
562
|
} catch (error) {
|
|
543
563
|
throw new DyFM_Error({
|
|
544
564
|
...this._getDefaultErrorSettings(
|
|
@@ -576,7 +596,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
576
596
|
idIsSubscribed(id: string): boolean {
|
|
577
597
|
try {
|
|
578
598
|
return !!this.presences.find(
|
|
579
|
-
(presence: DyNTS_SocketPresence) => presence.
|
|
599
|
+
(presence: DyNTS_SocketPresence) => presence.issuerLocalId === id
|
|
580
600
|
);
|
|
581
601
|
} catch (error) {
|
|
582
602
|
throw new DyFM_Error({
|
|
@@ -593,7 +613,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
593
613
|
|
|
594
614
|
async emitError(presenceIssuerId: string, error: any, issuer: string): Promise<void> {
|
|
595
615
|
try {
|
|
596
|
-
await this.sendEventForId(presenceIssuerId,
|
|
616
|
+
await this.sendEventForId(presenceIssuerId, DyFM_SocketEvent_Key.error, error, issuer);
|
|
597
617
|
} catch (error) {
|
|
598
618
|
throw new DyFM_Error({
|
|
599
619
|
...this._getDefaultErrorSettings(
|
|
@@ -611,7 +631,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
611
631
|
async sendEventForId(id: string, event: string, content: any, issuer: string): Promise<void> {
|
|
612
632
|
try {
|
|
613
633
|
const presence: DyNTS_SocketPresence = this.presences.find(
|
|
614
|
-
(pres: DyNTS_SocketPresence) => pres.
|
|
634
|
+
(pres: DyNTS_SocketPresence) => pres.issuerLocalId === id
|
|
615
635
|
);
|
|
616
636
|
|
|
617
637
|
if (!presence) {
|
|
@@ -643,15 +663,15 @@ export abstract class DyNTS_SocketServerService<
|
|
|
643
663
|
}
|
|
644
664
|
} catch (error) {
|
|
645
665
|
try {
|
|
646
|
-
if (error.flag.includes('DYNAMO') && error?.
|
|
647
|
-
const sockets: SocketIO.Socket[] = error.
|
|
666
|
+
if (error.flag.includes('DYNAMO') && error?.additionalInfo?.inactiveSockets) {
|
|
667
|
+
const sockets: SocketIO.Socket[] = error.additionalInfo.inactiveSockets;
|
|
648
668
|
|
|
649
669
|
await DyFM_Array.asyncForEach(sockets, async (socket: SocketIO.Socket) => {
|
|
650
670
|
await this.removeSubscription(socket);
|
|
651
671
|
});
|
|
652
672
|
|
|
653
673
|
const presence: DyNTS_SocketPresence = this.presences.find(
|
|
654
|
-
(pres: DyNTS_SocketPresence) => pres.
|
|
674
|
+
(pres: DyNTS_SocketPresence) => pres.issuerLocalId === id
|
|
655
675
|
);
|
|
656
676
|
|
|
657
677
|
if (!presence) {
|
|
@@ -713,7 +733,7 @@ export abstract class DyNTS_SocketServerService<
|
|
|
713
733
|
): DyFM_Error_Settings {
|
|
714
734
|
return {
|
|
715
735
|
status: (error as DyFM_Error)?.___status ?? 500,
|
|
716
|
-
message: (error as Error)?.message ?? `${fnName} was
|
|
736
|
+
message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS)`,
|
|
717
737
|
addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
|
|
718
738
|
userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
|
|
719
739
|
issuer: issuer,
|
|
@@ -730,35 +750,35 @@ export abstract class DyNTS_SocketServerService<
|
|
|
730
750
|
/**
|
|
731
751
|
* You must setup events and required services in this function
|
|
732
752
|
*/
|
|
733
|
-
protected abstract getIncomingEvents():
|
|
753
|
+
protected abstract getIncomingEvents(): DyFM_SocketEvent<any>[];
|
|
734
754
|
|
|
735
755
|
/**
|
|
736
756
|
* You can setup tasks for the subscription event in this function
|
|
737
757
|
*/
|
|
738
|
-
protected getSubscriptionTasks?():
|
|
758
|
+
protected getSubscriptionTasks?(): DyFM_SocketEventTask<T_SubscriptionContent>[];
|
|
739
759
|
|
|
740
760
|
/**
|
|
741
761
|
* You can setup tasks for the subscription event in this function
|
|
742
762
|
*/
|
|
743
|
-
protected getSubscriptionCloseTasks?():
|
|
763
|
+
protected getSubscriptionCloseTasks?(): DyFM_SocketEventTask<null>[];
|
|
744
764
|
|
|
745
765
|
/**
|
|
746
|
-
* You can setup
|
|
766
|
+
* You can setup preprocesses for the subscription event in this function
|
|
747
767
|
*/
|
|
748
|
-
protected
|
|
768
|
+
protected getSubscriptionPreProcesses?(): DyFM_SocketEventPreprocessTask[];
|
|
749
769
|
|
|
750
770
|
/**
|
|
751
771
|
* You can setup tasks for the unsubscribe event in this function
|
|
752
772
|
*/
|
|
753
|
-
protected getUnsubscribeTasks?():
|
|
773
|
+
protected getUnsubscribeTasks?(): DyFM_SocketEventTask<T_SubscriptionContent>[];
|
|
754
774
|
|
|
755
775
|
/**
|
|
756
|
-
* You can setup
|
|
776
|
+
* You can setup preprocesses for the unsubscribe event in this function
|
|
757
777
|
*/
|
|
758
|
-
protected
|
|
778
|
+
protected getUnsubscribePreProcesses?(): DyFM_SocketEventPreprocessTask[];
|
|
759
779
|
|
|
760
780
|
/**
|
|
761
781
|
* You can setup tasks for the error event in this function
|
|
762
782
|
*/
|
|
763
|
-
protected errorHandling?:
|
|
783
|
+
protected errorHandling?: DyFM_SocketEventTask<T_ErrorContent>;
|
|
764
784
|
}
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
// ENUMS
|
|
5
|
-
export * from './_enums/socket-event-key.enum';
|
|
6
5
|
export * from './_enums/socket-security.enum';
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
// MODELS
|
|
10
9
|
export * from './_models/socket-client-service-params.control-model';
|
|
11
|
-
export * from './_models/socket-event.control-model';
|
|
12
10
|
export * from './_models/socket-presence.control-model';
|
|
13
11
|
export * from './_models/socket-server-service-params.control-model';
|
|
14
12
|
|
|
@@ -161,7 +161,7 @@ export class DyNTS_Usage_DataService extends DyNTS_DataService<DyFM_UsageSession
|
|
|
161
161
|
)/* : DyFM_ErrorSettings */ {
|
|
162
162
|
return {
|
|
163
163
|
status: (error as DyFM_Error)?.___status ?? 417,
|
|
164
|
-
message: (error as Error)?.message ?? `${fnName} was
|
|
164
|
+
message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS; ${this.serviceName})`,
|
|
165
165
|
addECToUserMsg: true,
|
|
166
166
|
userMessage: this.defaultErrorUserMsg,
|
|
167
167
|
issuer: this.issuer,
|
|
@@ -800,7 +800,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
800
800
|
)
|
|
801
801
|
),
|
|
802
802
|
|
|
803
|
-
status:
|
|
803
|
+
status: 522,
|
|
804
804
|
errorCode: 'NTS-DS0-VD1',
|
|
805
805
|
userMessage: this.defaultValidationErrorUserMsg,
|
|
806
806
|
});
|
|
@@ -819,7 +819,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
819
819
|
)
|
|
820
820
|
),
|
|
821
821
|
|
|
822
|
-
status:
|
|
822
|
+
status: 522,
|
|
823
823
|
errorCode: 'NTS-DS0-VD2',
|
|
824
824
|
userMessage: this.defaultValidationErrorUserMsg,
|
|
825
825
|
});
|
|
@@ -841,7 +841,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
841
841
|
throw new DyFM_Error({
|
|
842
842
|
...this._getDefaultErrorSettings('validateForSave', error),
|
|
843
843
|
|
|
844
|
-
status:
|
|
844
|
+
status: 522,
|
|
845
845
|
errorCode: 'NTS-DS0-VD0',
|
|
846
846
|
});
|
|
847
847
|
}
|
|
@@ -910,7 +910,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
910
910
|
status: (error as DyFM_Error)?.___status ?? 500,
|
|
911
911
|
message:
|
|
912
912
|
(error as Error)?.message ??
|
|
913
|
-
`${fnName} was
|
|
913
|
+
`${fnName} was UNSUCCESSFUL (NTS; ${this.dataParams.dataName})`,
|
|
914
914
|
addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
|
|
915
915
|
userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
|
|
916
916
|
issuer: this.issuer,
|
|
@@ -91,7 +91,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
91
91
|
issuer
|
|
92
92
|
),
|
|
93
93
|
|
|
94
|
-
status:
|
|
94
|
+
status: 544,
|
|
95
95
|
errorCode: 'NTS-DBS-CD1',
|
|
96
96
|
additionalContent: { data },
|
|
97
97
|
issuer,
|
|
@@ -105,7 +105,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
105
105
|
throw new DyFM_Error({
|
|
106
106
|
...this._getDefaultErrorSettings('createData', error, issuer),
|
|
107
107
|
|
|
108
|
-
status:
|
|
108
|
+
status: 522,
|
|
109
109
|
errorCode: 'NTS-DBS-CD0',
|
|
110
110
|
additionalContent: { data, dataModel },
|
|
111
111
|
message:
|
|
@@ -920,7 +920,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
920
920
|
): DyFM_Error_Settings {
|
|
921
921
|
return {
|
|
922
922
|
status: (error as DyFM_Error)?.___status ?? 500,
|
|
923
|
-
message: (error as Error)?.message ?? `${fnName} was
|
|
923
|
+
message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS-DB)`,
|
|
924
924
|
addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
|
|
925
925
|
userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
|
|
926
926
|
issuer: issuer,
|
|
@@ -669,7 +669,7 @@ export class DyNTS_EmailService {
|
|
|
669
669
|
): DyFM_Error_Settings {
|
|
670
670
|
return {
|
|
671
671
|
status: (error as DyFM_Error)?.___status ?? 500,
|
|
672
|
-
message: (error as Error)?.message ?? `${fnName} was
|
|
672
|
+
message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS; ${this.serviceName})`,
|
|
673
673
|
addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
|
|
674
674
|
userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
|
|
675
675
|
issuer: issuer,
|