@futdevpro/fsm-dynamo 1.9.29 → 1.9.31
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/constants/global-settings.const.d.ts +3 -0
- package/build/_collections/constants/global-settings.const.d.ts.map +1 -0
- package/build/_collections/constants/global-settings.const.js +8 -0
- package/build/_collections/constants/global-settings.const.js.map +1 -0
- package/build/_collections/utils/log.util.d.ts +9 -4
- package/build/_collections/utils/log.util.d.ts.map +1 -1
- package/build/_collections/utils/log.util.js +19 -18
- package/build/_collections/utils/log.util.js.map +1 -1
- package/build/_collections/utils/math/math.util.d.ts +2 -0
- package/build/_collections/utils/math/math.util.d.ts.map +1 -1
- package/build/_collections/utils/math/math.util.js +17 -0
- package/build/_collections/utils/math/math.util.js.map +1 -1
- package/build/_enums/log-style.enum.d.ts +1 -0
- package/build/_enums/log-style.enum.d.ts.map +1 -1
- package/build/_enums/log-style.enum.js +1 -0
- package/build/_enums/log-style.enum.js.map +1 -1
- package/build/_models/control-models/error.control-model.js +1 -1
- package/build/_models/control-models/error.control-model.js.map +1 -1
- package/build/_models/interfaces/environment/global-log-settings.interface.d.ts +62 -0
- package/build/_models/interfaces/environment/global-log-settings.interface.d.ts.map +1 -0
- package/build/_models/interfaces/environment/global-log-settings.interface.js +3 -0
- package/build/_models/interfaces/environment/global-log-settings.interface.js.map +1 -0
- package/build/_models/interfaces/environment/global-settings.interface.d.ts +20 -0
- package/build/_models/interfaces/environment/global-settings.interface.d.ts.map +1 -0
- package/build/_models/interfaces/environment/global-settings.interface.js +3 -0
- package/build/_models/interfaces/environment/global-settings.interface.js.map +1 -0
- package/build/_modules/custom-data/_models/cud.data-model.d.ts +1 -1
- package/build/_modules/custom-data/_models/cud.data-model.d.ts.map +1 -1
- package/build/_modules/custom-data/_models/cud.data-model.js +2 -3
- package/build/_modules/custom-data/_models/cud.data-model.js.map +1 -1
- package/build/_modules/socket/_enums/sck-event-key.enum.d.ts +15 -0
- package/build/_modules/socket/_enums/sck-event-key.enum.d.ts.map +1 -0
- package/build/_modules/socket/_enums/sck-event-key.enum.js +19 -0
- package/build/_modules/socket/_enums/sck-event-key.enum.js.map +1 -0
- package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts +61 -0
- package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts.map +1 -0
- package/build/_modules/socket/_models/sck-socket-event.control-model.js +91 -0
- package/build/_modules/socket/_models/sck-socket-event.control-model.js.map +1 -0
- package/build/_modules/socket/_services/sck-client.service-base.d.ts +47 -0
- package/build/_modules/socket/_services/sck-client.service-base.d.ts.map +1 -0
- package/build/_modules/socket/_services/sck-client.service-base.js +230 -0
- package/build/_modules/socket/_services/sck-client.service-base.js.map +1 -0
- package/build/_modules/socket/index.d.ts +3 -0
- package/build/_modules/socket/index.d.ts.map +1 -1
- package/build/_modules/socket/index.js +5 -0
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_modules/usage/_models/usg-session.data-model.d.ts +1 -1
- package/build/_modules/usage/_models/usg-session.data-model.d.ts.map +1 -1
- package/build/_modules/usage/_models/usg-session.data-model.js +2 -2
- package/build/_modules/usage/_models/usg-session.data-model.js.map +1 -1
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +4 -0
- package/build/index.js.map +1 -1
- package/futdevpro-fsm-dynamo-01.09.31.tgz +0 -0
- package/package.json +1 -1
- package/src/_collections/constants/global-settings.const.ts +14 -0
- package/src/_collections/utils/log.util.ts +21 -24
- package/src/_collections/utils/math/math.util.ts +16 -0
- package/src/_enums/log-style.enum.ts +1 -0
- package/src/_models/control-models/error.control-model.ts +3 -3
- package/src/_models/interfaces/environment/global-log-settings.interface.ts +81 -0
- package/src/_models/interfaces/environment/global-settings.interface.ts +22 -0
- package/src/_modules/custom-data/_models/cud.data-model.ts +1 -2
- package/src/_modules/socket/_enums/sck-event-key.enum.ts +18 -0
- package/src/_modules/socket/_models/sck-client-params.control-model.ts +3 -1
- package/src/_modules/socket/_models/sck-socket-event.control-model.ts +151 -0
- package/src/_modules/socket/_services/sck-client.service-base.ts +303 -0
- package/src/_modules/socket/index.ts +8 -0
- package/src/_modules/usage/_models/usg-session.data-model.ts +1 -1
- package/src/index.ts +5 -0
- package/futdevpro-fsm-dynamo-01.09.29.tgz +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
|
|
2
|
+
import * as SocketIOClient from 'socket.io-client';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
DyFM_global_settings
|
|
6
|
+
} from '../../../_collections/constants/global-settings.const';
|
|
7
|
+
import { DyFM_Error } from '../../../_models/control-models/error.control-model';
|
|
8
|
+
import { DyFM_Log } from '../../../_collections/utils/log.util';
|
|
9
|
+
import { DyFM_Array } from '../../../_collections/utils/array.util';
|
|
10
|
+
import { DyFM_delay } from '../../../_collections/utils/utilities.util';
|
|
11
|
+
|
|
12
|
+
import { DyFM_SocketEvent_Key } from '../_enums/sck-event-key.enum';
|
|
13
|
+
import { DyFM_SocketClient_Params } from '../_models/sck-client-params.control-model';
|
|
14
|
+
import { DyFM_SocketEvent } from '../_models/sck-socket-event.control-model';
|
|
15
|
+
import { BehaviorSubject } from 'rxjs';
|
|
16
|
+
|
|
17
|
+
export abstract class DyFM_SocketClient_ServiceBase<T_SubscriptionContent = any> {
|
|
18
|
+
|
|
19
|
+
private _params: DyFM_SocketClient_Params;
|
|
20
|
+
protected get params(): DyFM_SocketClient_Params { return this._params; }
|
|
21
|
+
get name(): string { return this.params.name; }
|
|
22
|
+
|
|
23
|
+
protected socket: SocketIOClient.Socket;
|
|
24
|
+
|
|
25
|
+
protected incomingEvents: DyFM_SocketEvent<any>[];
|
|
26
|
+
|
|
27
|
+
protected _connected_BS: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
|
28
|
+
get connected(): boolean { return this._connected_BS.value; }
|
|
29
|
+
readonly connected$ = this._connected_BS.asObservable();
|
|
30
|
+
|
|
31
|
+
private _subscribed_BS: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
|
32
|
+
get subscribed(): boolean { return this._subscribed_BS.value; }
|
|
33
|
+
readonly subscribed$ = this._subscribed_BS.asObservable();
|
|
34
|
+
|
|
35
|
+
protected debugLog: boolean = DyFM_global_settings.log_settings.setup;
|
|
36
|
+
protected logFn: boolean = DyFM_global_settings.log_settings.functions;
|
|
37
|
+
|
|
38
|
+
private defaultEvents: DyFM_SocketEvent<any>[] = [
|
|
39
|
+
new DyFM_SocketEvent<any>({
|
|
40
|
+
eventKey: DyFM_SocketEvent_Key.connect,
|
|
41
|
+
tasks: [
|
|
42
|
+
async (): Promise<void> => {
|
|
43
|
+
this._connected_BS.next(true);
|
|
44
|
+
|
|
45
|
+
if (this.subscribed) {
|
|
46
|
+
this._subscribed_BS.next(false);
|
|
47
|
+
}
|
|
48
|
+
DyFM_Log.success(`< > socket-client(${this.params.name}) connected!`);
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
}),
|
|
52
|
+
|
|
53
|
+
new DyFM_SocketEvent<any>({
|
|
54
|
+
eventKey: DyFM_SocketEvent_Key.disconnect,
|
|
55
|
+
tasks: [
|
|
56
|
+
async (): Promise<void> => {
|
|
57
|
+
this._connected_BS.next(false);
|
|
58
|
+
|
|
59
|
+
if (this.subscribed) {
|
|
60
|
+
this._subscribed_BS.next(false);
|
|
61
|
+
}
|
|
62
|
+
DyFM_Log.warn(`<x > socket-client(${this.params.name}) disconnected!`);
|
|
63
|
+
|
|
64
|
+
if (this._params.reconnect) {
|
|
65
|
+
await DyFM_delay(this._params.reconnectDelay);
|
|
66
|
+
this.connectSocket();
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
}),
|
|
71
|
+
|
|
72
|
+
new DyFM_SocketEvent<any>({
|
|
73
|
+
eventKey: DyFM_SocketEvent_Key.subscriptionSuccessful,
|
|
74
|
+
tasks: [
|
|
75
|
+
async (): Promise<void> => {
|
|
76
|
+
DyFM_Log.success(`<=--> socket-client(${this.params.name}) subscription successful!`);
|
|
77
|
+
this._subscribed_BS.next(true);
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
}),
|
|
81
|
+
|
|
82
|
+
new DyFM_SocketEvent<any>({
|
|
83
|
+
eventKey: DyFM_SocketEvent_Key.unsubscribeSuccessful,
|
|
84
|
+
tasks: [
|
|
85
|
+
async (): Promise<void> => {
|
|
86
|
+
DyFM_Log.success(`<x--> socket-client(${this.params.name}) unsubscribe successful!`);
|
|
87
|
+
this._subscribed_BS.next(false);
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
}),
|
|
91
|
+
|
|
92
|
+
new DyFM_SocketEvent<any>({
|
|
93
|
+
eventKey: DyFM_SocketEvent_Key.error,
|
|
94
|
+
tasks: [
|
|
95
|
+
async (content: any): Promise<void> => {
|
|
96
|
+
DyFM_Log.error(`=--> socket-client(${this.params.name}) ERROR!:`, content);
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}),
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
protected constructor() {
|
|
103
|
+
this.asyncConstructor().catch((error: any): void => {
|
|
104
|
+
if (
|
|
105
|
+
DyFM_global_settings.log_settings.highDetailedLogs ||
|
|
106
|
+
!(error instanceof DyFM_Error)
|
|
107
|
+
) {
|
|
108
|
+
DyFM_Log.H_error(
|
|
109
|
+
`socket-client "${this.params?.name}" Service setup failed! ` +
|
|
110
|
+
`(DyFM_SocketClientService constructor catch)`,
|
|
111
|
+
`\n ERROR:`, error
|
|
112
|
+
);
|
|
113
|
+
} else {
|
|
114
|
+
error.logSimple(
|
|
115
|
+
`socket-client "${this.params?.name}" Service setup failed! ` +
|
|
116
|
+
`(DyFM_SocketClientService constructor catch)`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async subscribe(): Promise<void> {
|
|
123
|
+
try {
|
|
124
|
+
const subscriptionContent: T_SubscriptionContent = await this.getSubscriptionContent();
|
|
125
|
+
|
|
126
|
+
await this.emitEvent(DyFM_SocketEvent_Key.subscribe, subscriptionContent);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
DyFM_Log.error(`socket-client(${this.params.name}) Service Subscribe failed!`, error);
|
|
129
|
+
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async unsubscribe(): Promise<void> {
|
|
135
|
+
try {
|
|
136
|
+
await this.emitEvent(DyFM_SocketEvent_Key.unsubscribe, null);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
DyFM_Log.error(`socket-client(${this.params.name}) Service Unsubscribe failed!`, error);
|
|
139
|
+
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Emit event to the socket
|
|
146
|
+
* @param eventType event name
|
|
147
|
+
* @param content event content
|
|
148
|
+
*/
|
|
149
|
+
protected async emitEvent(eventType: string, content: any): Promise<void> {
|
|
150
|
+
try {
|
|
151
|
+
DyFM_Log.log(`<=-- outgoing socket-client(${this.params.name}) event: ${eventType}`);
|
|
152
|
+
this.socket.emit(eventType, content);
|
|
153
|
+
} catch (error) {
|
|
154
|
+
DyFM_Log.error(
|
|
155
|
+
`socket-client(${this.params.name}) ` +
|
|
156
|
+
`Service Emit Event failed: ${this.params?.name} (${this.params?.port})`, error
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private async asyncConstructor(): Promise<void> {
|
|
164
|
+
try {
|
|
165
|
+
this._params = this.getParams();
|
|
166
|
+
this.incomingEvents = this.getIncomingEvents() ?? [];
|
|
167
|
+
this.socket = SocketIOClient.io(
|
|
168
|
+
`${this.params.address}:${this.params.port}`,
|
|
169
|
+
{
|
|
170
|
+
/* reconnection: this.params.reconnect,
|
|
171
|
+
reconnectionDelay: this.params.reconnectDelay, */
|
|
172
|
+
...this.params.socketOptions,
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
await this.setupDefaultEvents();
|
|
177
|
+
|
|
178
|
+
await this.setupSocketEvents();
|
|
179
|
+
|
|
180
|
+
DyFM_Log.success(`\nsocket-client(${this.params?.name}) Service setup finished`);
|
|
181
|
+
|
|
182
|
+
await this.connectSocket();
|
|
183
|
+
} catch (error) {
|
|
184
|
+
DyFM_Log.error(`socket-client(${this.params?.name}) Service setup failed!`, error);
|
|
185
|
+
|
|
186
|
+
throw new DyFM_Error({
|
|
187
|
+
errorCode: 'FM-SCS-001',
|
|
188
|
+
error: error,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
private async setupDefaultEvents(): Promise<void> {
|
|
194
|
+
try {
|
|
195
|
+
if (this.logFn) console.log('\nFn:. setupDefaultEvents');
|
|
196
|
+
|
|
197
|
+
this.defaultEvents.forEach((defaultEvent: DyFM_SocketEvent<any>): void => {
|
|
198
|
+
defaultEvent.serviceName = this.params.name;
|
|
199
|
+
const eventDeclared = this.incomingEvents.find(
|
|
200
|
+
(event: DyFM_SocketEvent<any>): boolean => event.eventKey === defaultEvent.eventKey
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
if (!eventDeclared) {
|
|
204
|
+
this.incomingEvents.push(defaultEvent);
|
|
205
|
+
} else {
|
|
206
|
+
eventDeclared.tasks.unshift(...defaultEvent.tasks);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
} catch (error) {
|
|
210
|
+
DyFM_Log.error(
|
|
211
|
+
`socket-client(${this.params.name}) Service Setup Default Events failed, ` +
|
|
212
|
+
`ERROR:`, error
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private async setupSocketEvents(): Promise<void> {
|
|
220
|
+
try {
|
|
221
|
+
if (this.debugLog) console.log(`Setup socket-client(${this.params.name}) Events...`);
|
|
222
|
+
|
|
223
|
+
await DyFM_Array.asyncForEach(
|
|
224
|
+
this.incomingEvents,
|
|
225
|
+
async (event: DyFM_SocketEvent<any>): Promise<void> => {
|
|
226
|
+
event.serviceName = this.params.name;
|
|
227
|
+
this.socket.on(event.eventKey, async (content: any): Promise<void> => {
|
|
228
|
+
try {
|
|
229
|
+
await event.executeEventTasks(content, this.params.service);
|
|
230
|
+
} catch (error) {
|
|
231
|
+
DyFM_Log.error(`socket-client(${this.params.name}) Event failed, ERROR:`, error);
|
|
232
|
+
await this.emitEvent(DyFM_SocketEvent_Key.error, error);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
DyFM_Log.error(
|
|
239
|
+
`socket-client(${this.params.name}) Service Setup Socket Events failed, ` +
|
|
240
|
+
`ERROR:`, error
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private async connectSocket(): Promise<void> {
|
|
248
|
+
try {
|
|
249
|
+
DyFM_Log.info(
|
|
250
|
+
`< .. > socket-client(${this.params.name}) ` +
|
|
251
|
+
`connecting to ${this.params.address}:${this.params.port} ...`
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
this.socket.connect();
|
|
255
|
+
|
|
256
|
+
if (this.params.reconnect) {
|
|
257
|
+
await this.tryReconnectIfNeeded();
|
|
258
|
+
}
|
|
259
|
+
} catch (error) {
|
|
260
|
+
DyFM_Log.error(
|
|
261
|
+
`socket-client(${this.params.name}) Service Connect Socket failed, ` +
|
|
262
|
+
`ERROR:`, error
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
throw error;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private async tryReconnectIfNeeded(): Promise<void> {
|
|
270
|
+
try {
|
|
271
|
+
if (this.logFn) console.log(`\nFn:. tryReconnectIfNeeded`);
|
|
272
|
+
await DyFM_delay(this._params.reconnectDelay);
|
|
273
|
+
|
|
274
|
+
if (!this.connected) {
|
|
275
|
+
await this.connectSocket();
|
|
276
|
+
}
|
|
277
|
+
} catch (error) {
|
|
278
|
+
DyFM_Log.error(
|
|
279
|
+
`socket-client(${this.params.name}) Service Try Reconnect failed, ` +
|
|
280
|
+
`ERROR:`, error
|
|
281
|
+
);
|
|
282
|
+
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* You must setup params for the service in this function
|
|
289
|
+
*/
|
|
290
|
+
abstract getParams(): DyFM_SocketClient_Params;
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* You must setup events and required services in this function
|
|
294
|
+
*/
|
|
295
|
+
abstract getIncomingEvents(): DyFM_SocketEvent<any>[];
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* You must setup subscription content for the service in this function
|
|
299
|
+
*/
|
|
300
|
+
abstract getSubscriptionContent(): Promise<T_SubscriptionContent>;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
// ENUMS
|
|
5
|
+
export * from './_enums/sck-event-key.enum';
|
|
6
|
+
|
|
7
|
+
|
|
3
8
|
// MODELS
|
|
4
9
|
export * from './_models/sck-client-params.control-model';
|
|
10
|
+
export * from './_models/sck-socket-event.control-model';
|
|
5
11
|
|
|
6
12
|
|
|
13
|
+
// SERVICES
|
|
14
|
+
export * from './_services/sck-client.service-base';
|
|
@@ -34,7 +34,7 @@ export class DyFM_UsageSession extends DyFM_Metadata {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
export const
|
|
37
|
+
export const DyFM_usageSession_dataParams: DyFM_DataModel_Params =
|
|
38
38
|
new DyFM_DataModel_Params({
|
|
39
39
|
dataName: 'usageSession',
|
|
40
40
|
properties: [
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// COLLECTIONS
|
|
3
3
|
// collections/CONSTANTS
|
|
4
4
|
export * from './_collections/constants/error-defaults.const';
|
|
5
|
+
export * from './_collections/constants/global-settings.const';
|
|
5
6
|
export * from './_collections/constants/times.const';
|
|
6
7
|
|
|
7
8
|
// collections/UTILS
|
|
@@ -57,3 +58,7 @@ export * from './_models/interfaces/random-weight.interface';
|
|
|
57
58
|
export * from './_models/interfaces/route-settings.interface';
|
|
58
59
|
export * from './_models/interfaces/vector2.interface';
|
|
59
60
|
|
|
61
|
+
// models/interfaces/ENVIRONMENT
|
|
62
|
+
export * from './_models/interfaces/environment/global-settings.interface';
|
|
63
|
+
export * from './_models/interfaces/environment/global-log-settings.interface';
|
|
64
|
+
|
|
Binary file
|