@futdevpro/nts-dynamo 1.6.44 → 1.6.46

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 (30) hide show
  1. package/lib/_constants/mocks/socket-client.mock.js +1 -1
  2. package/lib/_constants/mocks/socket-client.mock.js.map +1 -1
  3. package/lib/_enums/http/socket-event-type.enum.d.ts +1 -1
  4. package/lib/_enums/http/socket-event-type.enum.d.ts.map +1 -1
  5. package/lib/_enums/http/socket-event-type.enum.js +12 -12
  6. package/lib/_enums/http/socket-event-type.enum.js.map +1 -1
  7. package/lib/_models/control-models/socket-event.control-model.d.ts +6 -5
  8. package/lib/_models/control-models/socket-event.control-model.d.ts.map +1 -1
  9. package/lib/_models/control-models/socket-event.control-model.js +15 -19
  10. package/lib/_models/control-models/socket-event.control-model.js.map +1 -1
  11. package/lib/_models/control-models/socket-presence.control-model.d.ts.map +1 -1
  12. package/lib/_models/control-models/socket-presence.control-model.js +12 -4
  13. package/lib/_models/control-models/socket-presence.control-model.js.map +1 -1
  14. package/lib/_services/core/api.service.js +9 -9
  15. package/lib/_services/core/api.service.js.map +1 -1
  16. package/lib/_services/socket/socket-client.service.js +6 -6
  17. package/lib/_services/socket/socket-client.service.js.map +1 -1
  18. package/lib/_services/socket/socket-server.service.d.ts +3 -3
  19. package/lib/_services/socket/socket-server.service.d.ts.map +1 -1
  20. package/lib/_services/socket/socket-server.service.js +46 -31
  21. package/lib/_services/socket/socket-server.service.js.map +1 -1
  22. package/lib/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +1 -1
  24. package/src/_constants/mocks/socket-client.mock.ts +2 -2
  25. package/src/_enums/http/socket-event-type.enum.ts +2 -1
  26. package/src/_models/control-models/socket-event.control-model.ts +18 -22
  27. package/src/_models/control-models/socket-presence.control-model.ts +13 -4
  28. package/src/_services/core/api.service.ts +9 -9
  29. package/src/_services/socket/socket-client.service.ts +7 -7
  30. package/src/_services/socket/socket-server.service.ts +56 -31
@@ -1,4 +1,4 @@
1
- import { DynamoNTS_SocketEventType } from '../../_enums';
1
+ import { DynamoNTS_SocketEventKey } from '../../_enums';
2
2
  import { DynamoNTS_SocketClientServiceParams, DynamoNTS_SocketEvent } from '../../_models';
3
3
  import { DynamoNTS_SocketClientService } from '../../_modules/app-extended.index';
4
4
 
@@ -18,7 +18,7 @@ export class SocketClient_Mock extends DynamoNTS_SocketClientService {
18
18
  return [
19
19
  new DynamoNTS_SocketEvent({
20
20
  name: 'connect',
21
- eventType: DynamoNTS_SocketEventType.connect,
21
+ eventKey: DynamoNTS_SocketEventKey.connect,
22
22
  tasks: [
23
23
  async (content: any, issuer: string) => {
24
24
  console.log('SocketClient_Mock: connect event received');
@@ -1,9 +1,10 @@
1
1
 
2
- export enum DynamoNTS_SocketEventType {
2
+ export enum DynamoNTS_SocketEventKey {
3
3
  /** incoming connection */
4
4
  connection = 'connection',
5
5
  /** outgoing connection */
6
6
  connect = 'connect',
7
+
7
8
  subscribe = 'subscribe',
8
9
  subscriptionSuccessful = 'subscriptionSuccessful',
9
10
  unsubscribe = 'unsubscribe',
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { Dynamo_Array, Dynamo_Log } from '@futdevpro/fsm-dynamo';
3
3
  import { dynamoNTS_globalSettings } from '../../_constants/global-settings.const';
4
- import { DynamoNTS_SocketEventType } from '../../_enums/http/socket-event-type.enum';
4
+ import { DynamoNTS_SocketEventKey } from '../../_enums/http/socket-event-type.enum';
5
5
 
6
6
 
7
7
  export type DynamoNTS_SocketEventPreprocessTask<T = any, R = any> = (content?: T, issuer?: string) => Promise<R>;
@@ -12,7 +12,7 @@ export type DynamoNTS_SocketEventTask<T> = (content?: T, issuer?: string) => Pro
12
12
  */
13
13
  export class DynamoNTS_SocketEvent<T>{
14
14
  socketName?: string;
15
- eventType: DynamoNTS_SocketEventType | string;
15
+ eventKey: DynamoNTS_SocketEventKey | string;
16
16
 
17
17
  preProcessess?: DynamoNTS_SocketEventPreprocessTask<any, any>[];
18
18
  tasks?: DynamoNTS_SocketEventTask<T>[];
@@ -23,14 +23,15 @@ export class DynamoNTS_SocketEvent<T>{
23
23
  constructor(
24
24
  set: {
25
25
  /**
26
- * naming the socket will help to follow events on service
26
+ * naming the socket will help to follow events on service,
27
+ * if not set, the eventKey will be used
27
28
  */
28
- name: string,
29
+ name?: string,
29
30
  /**
30
31
  * define socket event type such as;
31
32
  * connection, connect, disconnect, message, error, or anything else
32
33
  */
33
- eventType: DynamoNTS_SocketEventType | string,
34
+ eventKey: DynamoNTS_SocketEventKey | string,
34
35
  /**
35
36
  * preprocesses are the functions the service needs to run before the actual function,
36
37
  * these can be used for authentications, or translating data
@@ -53,36 +54,31 @@ export class DynamoNTS_SocketEvent<T>{
53
54
  }
54
55
  ) {
55
56
  try {
56
- this.socketName = set.name;
57
- this.eventType = set.eventType;
57
+ this.socketName = set.name ?? set.eventKey;
58
+ this.eventKey = set.eventKey;
58
59
 
59
60
  this.preProcessess = set.preProcessess ?? [];
60
61
  this.tasks = set.tasks ?? [];
61
62
 
62
63
  if (set.logEvent !== undefined) {
63
64
  this.logEvent = set.logEvent;
64
- } else if (this.eventType === DynamoNTS_SocketEventType.subscribe) {
65
+ } else if (this.eventKey === DynamoNTS_SocketEventKey.subscribe) {
65
66
  this.logEvent = false;
66
67
  } else if (
67
68
  ([
68
- DynamoNTS_SocketEventType.connection,
69
- DynamoNTS_SocketEventType.connect,
70
- /* DynamoNTS_SocketEventType.subscribe, */
71
- DynamoNTS_SocketEventType.disconnect,
72
- ] as string[]).includes(this.eventType)
69
+ DynamoNTS_SocketEventKey.connection,
70
+ DynamoNTS_SocketEventKey.connect,
71
+ DynamoNTS_SocketEventKey.disconnect,
72
+ ] as string[]).includes(this.eventKey)
73
73
  ) {
74
74
  this.logEvent = dynamoNTS_globalSettings.logMainSocketEvents || dynamoNTS_globalSettings.logAllSocketEvent;
75
75
  } else {
76
76
  this.logEvent = dynamoNTS_globalSettings.logAllSocketEvent;
77
77
  }
78
78
  this.logEventContent = set.logEventContent !== undefined ? set.logEventContent : dynamoNTS_globalSettings.logSocketEventContent;
79
-
80
- /* if (this.logEvent) {
81
- this.preProcessess.unshift(this.getPreLog());
82
- } */
83
79
  } catch (error) {
84
80
  Dynamo_Log.error(
85
- `\nSocket Event params setup failed (${this.socketName}): ${set.eventType}`, error);
81
+ `\nSocket Event params setup failed (${this.socketName}): ${set.eventKey}`, error);
86
82
  throw error;
87
83
  }
88
84
  }
@@ -93,10 +89,10 @@ export class DynamoNTS_SocketEvent<T>{
93
89
  */
94
90
  private async getPreLog(content: T, issuer?: string): Promise<void> {
95
91
  try {
96
- if (this.logEventContent && this.eventType !== DynamoNTS_SocketEventType.connection) {
97
- Dynamo_Log.log(`---> incoming socket(${this.socketName}) event: ${this.eventType};\ncontent:`, content);
92
+ if (this.logEventContent && this.eventKey !== DynamoNTS_SocketEventKey.connection) {
93
+ Dynamo_Log.log(`---> incoming socket(${this.socketName}) event: ${this.eventKey};\ncontent:`, content);
98
94
  } else {
99
- Dynamo_Log.log(`---> incoming socket(${this.socketName}) event: ${this.eventType}...`);
95
+ Dynamo_Log.log(`---> incoming socket(${this.socketName}) event: ${this.eventKey}...`);
100
96
  }
101
97
  } catch (error) {
102
98
  Dynamo_Log.error(`PreLog failed... (socket: ${this.socketName})`, error);
@@ -121,7 +117,7 @@ export class DynamoNTS_SocketEvent<T>{
121
117
  await task(content, issuer);
122
118
  });
123
119
  } catch (error) {
124
- Dynamo_Log.error(`Socket Event tasks failed to execute on ${this.socketName}.... (${this.eventType})`, error, 'content:', content);
120
+ Dynamo_Log.error(`Socket Event tasks failed to execute on ${this.socketName}.... (${this.eventKey})`, error, 'content:', content);
125
121
  }
126
122
  }
127
123
  }
@@ -47,23 +47,26 @@ export class DynamoNTS_SocketPresence {
47
47
  emitEvent?(event: string, content: any) {
48
48
  let anyFailed: boolean = false;
49
49
  const errors = [];
50
+ const inactiveSockets: SocketIO.Socket[] = [];
50
51
 
51
52
  this.sockets.forEach((socket: SocketIO.Socket, index: number) => {
52
53
  if (!socket.connected) {
53
- Dynamo_Log.error(`Emitting event '${event}' on socket(${index}) failed! socket[${socket}] is not connected!`);
54
+ Dynamo_Log.error(`Emitting event '${event}' on socket(${index}) failed! socket[${socket.id}] is not connected!`);
55
+ anyFailed = true;
54
56
  errors.push(
55
57
  new Dynamo_Error({
56
58
  status: 500,
57
59
  errorCode: 'NTS-SPC-EE1',
58
60
  addECToUserMsg: true,
59
- message: `Emitting event '${event}' on socket(${index}) failed! socket[${socket}] is not connected!`,
61
+ message: `Emitting event '${event}' on socket(${index}) failed! socket[${socket.id}] is not connected!`,
60
62
  userMessage: 'We encountered an unhandled Server Error, please contact the responsible development team.',
61
63
  })
62
64
  );
65
+ inactiveSockets.push(socket);
63
66
  }
64
67
 
65
- const success: boolean = socket.emit(event, content, (error) => {
66
- Dynamo_Log.error(`Emitting event '${event}' on socket(${index}) failed! (0)`, error);
68
+ const success: boolean = socket.emit(event, content, error => {
69
+ Dynamo_Log.error(`Emitting event '${event}' on socket(${index}) failed! (0)\nerror:`, error);
67
70
  errors.push(error);
68
71
  anyFailed = true;
69
72
  });
@@ -74,6 +77,8 @@ export class DynamoNTS_SocketPresence {
74
77
  });
75
78
 
76
79
  if (anyFailed) {
80
+ /* this.sockets = this.sockets.filter(socket => !inactiveSockets.includes(socket)); */
81
+
77
82
  throw new Dynamo_Error({
78
83
  status: 500,
79
84
  errorCode: 'NTS-SPC-EE2',
@@ -81,6 +86,10 @@ export class DynamoNTS_SocketPresence {
81
86
  message: `Emitting event '${event}' on socket(s) failed!`,
82
87
  userMessage: 'We encountered an unhandled Server Error, please contact the responsible development team.',
83
88
  /* errors: errors, */
89
+ additionalContent: {
90
+ inactiveSockets: inactiveSockets,
91
+ errors: errors,
92
+ }
84
93
  });
85
94
  }
86
95
  }
@@ -55,7 +55,7 @@ export class DynamoNTS_ApiService {
55
55
  if (callParams.httpOptions.headers[headerKey]) {
56
56
  privateAxiosInstance.defaults.headers.common[headerKey] = callParams.httpOptions.headers[headerKey];
57
57
  } else {
58
- Dynamo_Log.error('DYNAMOBE ERROR: \n missing header:', headerKey, '\n\n', new Error());
58
+ Dynamo_Log.error('DYNAMOBE ERROR: \n missing header:', headerKey/* , '\n\n', new Error() */);
59
59
  }
60
60
  }
61
61
  }
@@ -76,7 +76,7 @@ export class DynamoNTS_ApiService {
76
76
  break;
77
77
  }
78
78
  } else {
79
- Dynamo_Log.error('DYNAMOBE ERROR: \n missing pathParam:', pathParamKey, '\n\n', new Error());
79
+ Dynamo_Log.error('DYNAMOBE ERROR: \n missing pathParam:', pathParamKey/* , '\n\n', new Error() */);
80
80
  }
81
81
  }
82
82
  }
@@ -160,7 +160,7 @@ export class DynamoNTS_ApiService {
160
160
  });
161
161
  break;
162
162
  default:
163
- Dynamo_Log.error('DYNAMOBE ERROR: \n wrong api call type', '\n\n', new Error());
163
+ Dynamo_Log.error('DYNAMOBE ERROR: \n wrong api call type'/* , '\n\n', new Error() */);
164
164
  break;
165
165
  }
166
166
 
@@ -171,14 +171,14 @@ export class DynamoNTS_ApiService {
171
171
  }
172
172
  } catch (error) {
173
173
  Dynamo_Log.error(`\nAPI ERROR: ${callParams?.name} failed...` +
174
- `\n${callParams?.baseUrl}${callParams?.endPoint}\n`, callParams);
174
+ `\n${callParams?.baseUrl}${callParams?.endPoint}\ncallParams:`, callParams);
175
175
 
176
176
  if (callParams?.httpOptions?.responseType === DynamoNTS_HttpResponseType.text) {
177
177
  error.error = JSON.parse(error.error);
178
178
  }
179
179
 
180
180
  if (error?.response?.data?.flag?.includes('DYNAMO')) {
181
- Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL\n\n`, new Error());
181
+ Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL`/* , new Error() */);
182
182
 
183
183
  throw new Dynamo_Error({
184
184
  errorCode: 'NTS-API-002',
@@ -190,7 +190,7 @@ export class DynamoNTS_ApiService {
190
190
  });
191
191
 
192
192
  } else if (error.code === 'ENOTFOUND') {
193
- Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL\n\n`, new Error());
193
+ Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL`/* , new Error() */);
194
194
 
195
195
  throw new Dynamo_Error({
196
196
  status: 404,
@@ -203,7 +203,7 @@ export class DynamoNTS_ApiService {
203
203
  });
204
204
 
205
205
  } else if (error.code === 'ECONNREFUSED') {
206
- Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL\n\n`, new Error());
206
+ Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL`/* , new Error() */);
207
207
 
208
208
  throw new Dynamo_Error({
209
209
  status: 404,
@@ -222,11 +222,11 @@ export class DynamoNTS_ApiService {
222
222
  errorCode: 'NTS-API-005',
223
223
  addECToUserMsg: true,
224
224
  userMessage: this.defaultErrorUserMsg,
225
- issuerService: this.name,
225
+ issuerService: this/* .constructor */.name,
226
226
  error
227
227
  });
228
228
  } else {
229
- Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL`, error, '\n\n', new Error());
229
+ Dynamo_Log.error(`\n${callParams.name} was UNSUCCESSFUL`, error/*, '\n\n' , new Error() */);
230
230
 
231
231
  throw error;
232
232
  }
@@ -9,7 +9,7 @@ import { delay, Dynamo_Array } from '@futdevpro/fsm-dynamo/utils';
9
9
  import { DynamoNTS_SocketClientServiceParams } from '../../_models/control-models/socket-client-service-params.control-model';
10
10
  import { dynamoNTS_globalSettings } from '../../_constants/global-settings.const';
11
11
  import { DynamoNTS_SocketEvent } from '../../_models/control-models/socket-event.control-model';
12
- import { DynamoNTS_SocketEventType } from '../../_enums/http/socket-event-type.enum';
12
+ import { DynamoNTS_SocketEventKey } from '../../_enums/http/socket-event-type.enum';
13
13
 
14
14
  export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonService {
15
15
 
@@ -30,7 +30,7 @@ export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonS
30
30
  private defaultEvents: DynamoNTS_SocketEvent<any>[] = [
31
31
  new DynamoNTS_SocketEvent<any>({
32
32
  name: 'connect',
33
- eventType: DynamoNTS_SocketEventType.connect,
33
+ eventKey: DynamoNTS_SocketEventKey.connect,
34
34
  tasks: [
35
35
  async () => {
36
36
  this._connected = true;
@@ -40,7 +40,7 @@ export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonS
40
40
  }),
41
41
  new DynamoNTS_SocketEvent<any>({
42
42
  name: 'disconnect',
43
- eventType: DynamoNTS_SocketEventType.disconnect,
43
+ eventKey: DynamoNTS_SocketEventKey.disconnect,
44
44
  tasks: [
45
45
  async () => {
46
46
  this._connected = false;
@@ -55,7 +55,7 @@ export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonS
55
55
  }),
56
56
  new DynamoNTS_SocketEvent<any>({
57
57
  name: 'error',
58
- eventType: DynamoNTS_SocketEventType.error,
58
+ eventKey: DynamoNTS_SocketEventKey.error,
59
59
  tasks: [
60
60
  async (content: any) => {
61
61
  Dynamo_Log.error(`Socket Client error: ${this.params.name}`, content);
@@ -98,7 +98,7 @@ export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonS
98
98
  try {
99
99
  if (this.logFn) console.log('\nFn:. setupDefaultEvents')
100
100
  this.defaultEvents.forEach((defaultEvent: DynamoNTS_SocketEvent<any>) => {
101
- const eventDeclared = this.incomingEvents.find((event: DynamoNTS_SocketEvent<any>) => event.eventType === defaultEvent.eventType);
101
+ const eventDeclared = this.incomingEvents.find((event: DynamoNTS_SocketEvent<any>) => event.eventKey === defaultEvent.eventKey);
102
102
  if (!eventDeclared) {
103
103
  this.incomingEvents.push(defaultEvent);
104
104
  } else {
@@ -119,12 +119,12 @@ export abstract class DynamoNTS_SocketClientService extends DynamoNTS_SingletonS
119
119
  if (!event.socketName) {
120
120
  event.socketName = this.name;
121
121
  }
122
- this.socket.on(event.eventType, async (content: any) => {
122
+ this.socket.on(event.eventKey, async (content: any) => {
123
123
  try {
124
124
  await event.executeEventTasks(content, this.params.service);
125
125
  } catch (error) {
126
126
  Dynamo_Log.error(`Socket Event failed: ${this.params.name} (${this.params.port})`, error);
127
- await this.emitEvent(DynamoNTS_SocketEventType.error, error);
127
+ await this.emitEvent(DynamoNTS_SocketEventKey.error, error);
128
128
  }
129
129
  });
130
130
  });
@@ -5,7 +5,7 @@ import { Dynamo_Array, Dynamo_Error, Dynamo_Log } from '@futdevpro/fsm-dynamo';
5
5
 
6
6
  import { DynamoNTS_SingletonService } from '../base/singleton.service';
7
7
  import { dynamoNTS_globalSettings } from '../../_constants/global-settings.const';
8
- import { DynamoNTS_SocketEventType } from '../../_enums/http/socket-event-type.enum';
8
+ import { DynamoNTS_SocketEventKey } from '../../_enums/http/socket-event-type.enum';
9
9
  import { DynamoNTS_SocketSecurity } from '../../_enums/socket-security.enum';
10
10
  import { DynamoNTS_SocketServerServiceParams } from '../../_models/control-models/socket-server-service-params.control-model';
11
11
  import { DynamoNTS_SocketPresence } from '../../_models/control-models/socket-presence.control-model';
@@ -88,19 +88,18 @@ export abstract class DynamoNTS_SocketServerService<
88
88
  */
89
89
  private async prepareEvents(): Promise<void> {
90
90
  try {
91
- const connectEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventType === DynamoNTS_SocketEventType.connection);
91
+ const connectEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventKey === DynamoNTS_SocketEventKey.connection);
92
92
  if (0 <= connectEventIndex) {
93
93
  this.connectEvent = this.incomingEvents.splice(connectEventIndex)[0];
94
94
  } else {
95
95
  this.connectEvent = new DynamoNTS_SocketEvent({
96
- name: 'connect',
97
- eventType: DynamoNTS_SocketEventType.connection,
96
+ eventKey: DynamoNTS_SocketEventKey.connection,
98
97
  });
99
98
  }
100
99
  this.connectEvent.socketName = this.params.name;
101
100
 
102
101
  if (this.getPresenceFromSubscrioptionEventContent) {
103
- const subscriptionEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventType === DynamoNTS_SocketEventType.subscribe);
102
+ const subscriptionEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventKey === DynamoNTS_SocketEventKey.subscribe);
104
103
  if (0 <= subscriptionEventIndex) {
105
104
  this.subscriptionEvent = this.incomingEvents.splice(subscriptionEventIndex)[0];
106
105
  Dynamo_Log.error(
@@ -110,8 +109,7 @@ export abstract class DynamoNTS_SocketServerService<
110
109
  );
111
110
  } else {
112
111
  this.subscriptionEvent = new DynamoNTS_SocketEvent<T_SubscriptionContent>({
113
- name: 'subscribe',
114
- eventType: DynamoNTS_SocketEventType.subscribe
112
+ eventKey: DynamoNTS_SocketEventKey.subscribe
115
113
  });
116
114
  }
117
115
  if (this.getSubscriptionPreProcessess) {
@@ -121,26 +119,24 @@ export abstract class DynamoNTS_SocketServerService<
121
119
  this.subscriptionEvent.tasks.push(...this.getSubscriptionTasks());
122
120
  }
123
121
 
124
- const disconnectEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventType === DynamoNTS_SocketEventType.disconnect);
122
+ const disconnectEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventKey === DynamoNTS_SocketEventKey.disconnect);
125
123
  if (0 <= disconnectEventIndex) {
126
- this.incomingEvents[disconnectEventIndex].tasks.push(this.removeSubscriptionOnDisconnect);
124
+ this.incomingEvents[disconnectEventIndex].tasks.push(this.removeSubscription);
127
125
  } else {
128
126
  this.incomingEvents.push(
129
127
  new DynamoNTS_SocketEvent({
130
- name: 'disconnect',
131
- eventType: DynamoNTS_SocketEventType.disconnect,
128
+ eventKey: DynamoNTS_SocketEventKey.disconnect,
132
129
  tasks: [
133
- this.removeSubscriptionOnDisconnect
130
+ this.removeSubscription
134
131
  ]
135
132
  })
136
133
  );
137
134
  }
138
135
 
139
- const errorEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventType === DynamoNTS_SocketEventType.error);
136
+ const errorEventIndex = this.incomingEvents.findIndex((event: DynamoNTS_SocketEvent<any>) => event.eventKey === DynamoNTS_SocketEventKey.error);
140
137
  if (errorEventIndex == -1 && this.errorHandling) {
141
138
  this.incomingEvents.push(new DynamoNTS_SocketEvent<T_ErrorContent>({
142
- name: 'error',
143
- eventType: DynamoNTS_SocketEventType.error,
139
+ eventKey: DynamoNTS_SocketEventKey.error,
144
140
  tasks: [
145
141
  this.errorHandling
146
142
  ]
@@ -165,14 +161,14 @@ export abstract class DynamoNTS_SocketServerService<
165
161
  try {
166
162
  if (this.logFn) console.log('\nfn:. setupSocketServer');
167
163
 
168
- newSocketServer.on(DynamoNTS_SocketEventType.connection, async (socket: SocketIO.Socket) => {
164
+ newSocketServer.on(DynamoNTS_SocketEventKey.connection, async (socket: SocketIO.Socket) => {
169
165
  try {
170
166
  let issuer: string;
171
167
 
172
168
  await this.connectEvent.executeEventTasks(socket);
173
169
 
174
170
  if (this.getPresenceFromSubscrioptionEventContent) {
175
- socket.on(DynamoNTS_SocketEventType.subscribe, async (content: any) => {
171
+ socket.on(DynamoNTS_SocketEventKey.subscribe, async (content: any) => {
176
172
  try {
177
173
  /**
178
174
  * usually socket logs are in event.executeEventTasks(),
@@ -180,33 +176,37 @@ export abstract class DynamoNTS_SocketServerService<
180
176
  * to be able to check content before getPresenceFromSubscrioptionEventContent
181
177
  */
182
178
  if (dynamoNTS_globalSettings.logMainSocketEvents || dynamoNTS_globalSettings.logAllSocketEvent || dynamoNTS_globalSettings.logSocketEventContent) {
183
- Dynamo_Log.log(`---> incoming socket(${this.params.name}) event: ${DynamoNTS_SocketEventType.subscribe};\ncontent:`, content);
179
+ Dynamo_Log.log(`---> incoming socket(${this.params.name}) event: ${DynamoNTS_SocketEventKey.subscribe};\ncontent:`, content);
184
180
  } else {
185
- Dynamo_Log.log(`---> incoming socket(${this.params.name}) event: ${DynamoNTS_SocketEventType.subscribe}`);
181
+ Dynamo_Log.log(`---> incoming socket(${this.params.name}) event: ${DynamoNTS_SocketEventKey.subscribe}`);
186
182
  }
187
183
 
188
184
  const presence: T_Presence = await this.getPresenceFromSubscrioptionEventContent(content, socket);
189
185
  issuer = presence.issuerId;
190
186
 
191
- this.socketSubscription(presence);
187
+ this.addSocketToPresence(presence);
192
188
  await this.subscriptionEvent.executeEventTasks(content, issuer);
193
189
 
190
+ socket.emit(DynamoNTS_SocketEventKey.subscriptionSuccessful, 'subscribe was successful', error => {
191
+ Dynamo_Log.error(`Emitting subscriptionSuccessful event failed!\nerror:`, error);
192
+ });
193
+
194
194
  Dynamo_Log.success(`<===> socket subscription successfull (${issuer})`);
195
195
  } catch (error) {
196
196
  Dynamo_Log.error(`Socket Subscription failed: ${this.params.name} (${this.params.port}) will disconnect now...`, error);
197
- socket.emit(DynamoNTS_SocketEventType.error, error);
197
+ socket.emit(DynamoNTS_SocketEventKey.error, error);
198
198
  socket.disconnect();
199
199
  }
200
200
  })
201
201
  }
202
202
 
203
203
  this.incomingEvents.forEach((event: DynamoNTS_SocketEvent<any>) => {
204
- socket.on(event.eventType, async (content: any) => {
204
+ socket.on(event.eventKey, async (content: any) => {
205
205
  try {
206
206
  await event.executeEventTasks(content, issuer);
207
207
  } catch (error) {
208
208
  Dynamo_Log.error(`Socket Event failed: ${this.params.name} (${this.params.port})`, error);
209
- socket.emit(DynamoNTS_SocketEventType.error, error);
209
+ socket.emit(DynamoNTS_SocketEventKey.error, error);
210
210
  }
211
211
  });
212
212
  });
@@ -216,7 +216,7 @@ export abstract class DynamoNTS_SocketServerService<
216
216
  }
217
217
  } catch (error) {
218
218
  Dynamo_Log.error(`Socket Connection failed: ${this.params.name} (${this.params.port}) will disconnect now...`, error);
219
- socket.emit(DynamoNTS_SocketEventType.error, error);
219
+ socket.emit(DynamoNTS_SocketEventKey.error, error);
220
220
  socket.disconnect();
221
221
  }
222
222
  });
@@ -243,7 +243,7 @@ export abstract class DynamoNTS_SocketServerService<
243
243
  }
244
244
  }
245
245
 
246
- protected async socketSubscription(newPresence: T_Presence): Promise<void> {
246
+ protected async addSocketToPresence(newPresence: T_Presence): Promise<void> {
247
247
  try {
248
248
  const activePresence: T_Presence = this.presences.find((pres: T_Presence) => pres.issuerId === newPresence.issuerId);
249
249
 
@@ -258,7 +258,7 @@ export abstract class DynamoNTS_SocketServerService<
258
258
  }
259
259
  }
260
260
 
261
- private async removeSubscriptionOnDisconnect(socket: SocketIO.Socket, issuer?: string): Promise<void> {
261
+ private async removeSubscription(socket: SocketIO.Socket, issuer?: string): Promise<void> {
262
262
  try {
263
263
  const activePresenceIndex: number = this.presences.findIndex((pres: DynamoNTS_SocketPresence) => pres.sockets.includes(socket));
264
264
 
@@ -310,6 +310,8 @@ export abstract class DynamoNTS_SocketServerService<
310
310
  if (activePresence.sockets.length === 0) {
311
311
  this.presences.splice(activePresenceIndex);
312
312
  }
313
+
314
+ socket.disconnect();
313
315
  } catch (error) {
314
316
  throw new Dynamo_Error({
315
317
  ...this._getDefaultErrorSettings(
@@ -324,10 +326,12 @@ export abstract class DynamoNTS_SocketServerService<
324
326
  }
325
327
  }
326
328
 
327
- emitEvent(event: string, content: any): void {
329
+ emitServerEvent(event: string, content: any): void {
328
330
  try {
329
- Dynamo_Log.log(` <--- emitting socket event: ${event} (${this.params.name})`);
330
- this.openSocketServer.emit(event, content);
331
+ Dynamo_Log.log(` <=-- emitting server socket event: ${event} (${this.params.name})`);
332
+ this.openSocketServer.emit(event, content, error => {
333
+ Dynamo_Log.error(`Emitting server event '${event}' failed!\nerror:`, error);
334
+ });
331
335
  } catch (error) {
332
336
  throw new Dynamo_Error({
333
337
  ...this._getDefaultErrorSettings(
@@ -359,7 +363,7 @@ export abstract class DynamoNTS_SocketServerService<
359
363
 
360
364
  emitError(presenceIssuerId: string, error: any): void {
361
365
  try {
362
- this.sendEventForId(presenceIssuerId, DynamoNTS_SocketEventType.error, error);
366
+ this.sendEventForId(presenceIssuerId, DynamoNTS_SocketEventKey.error, error);
363
367
  } catch (error) {
364
368
  throw new Dynamo_Error({
365
369
  ...this._getDefaultErrorSettings(
@@ -398,10 +402,30 @@ export abstract class DynamoNTS_SocketServerService<
398
402
  });
399
403
  }
400
404
  } catch (error) {
405
+
406
+ try {
407
+ if (error.flag.includes('DYNAMO') && error?.accitionalInfo?.inactiveSockets) {
408
+ const sockets: SocketIO.Socket[] = error.accitionalInfo.inactiveSockets;
409
+
410
+ await Dynamo_Array.asyncForEach(sockets, async (socket: SocketIO.Socket) => {
411
+ await this.removeSubscription(socket);
412
+ });
413
+ }
414
+ } catch (error) {
415
+ throw new Dynamo_Error({
416
+ ...this._getDefaultErrorSettings('sendEventForId', error, content?.source),
417
+
418
+ errorCode: 'NTS-SSS-310',
419
+ message:
420
+ `Error handling of inactive sockets failed!` +
421
+ `\n(Socket Event Emit for id (${id}, ${event}) failed: ${this.params?.name} (${this.params?.port}))`,
422
+ });
423
+ }
424
+
401
425
  throw new Dynamo_Error({
402
426
  ...this._getDefaultErrorSettings('sendEventForId', error, content?.source),
403
427
 
404
- errorCode: 'NTS-SSS-300',
428
+ errorCode: 'NTS-SSS-310',
405
429
  message: `Socket Event Emit for id (${id}, ${event}) failed: ${this.params?.name} (${this.params?.port})`,
406
430
  });
407
431
  }
@@ -409,6 +433,7 @@ export abstract class DynamoNTS_SocketServerService<
409
433
 
410
434
  broadcastEvent(event: string, content: any): void {
411
435
  try {
436
+ Dynamo_Log.log(` <==-- broadcasting socket event: ${event} (${this.params.name})`);
412
437
  this.presences.forEach((presence: DynamoNTS_SocketPresence) => {
413
438
  presence.emitEvent(event, content);
414
439
  });