@nsshunt/stssocketioutils 2.0.17 → 2.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node.cjs +9 -0
- package/dist/node.cjs.map +1 -1
- package/dist/node.mjs +9 -0
- package/dist/node.mjs.map +1 -1
- package/package.json +1 -1
- package/types/socketIoServer.d.ts +3 -0
- package/types/socketIoServer.d.ts.map +1 -1
package/dist/node.cjs
CHANGED
|
@@ -26,6 +26,12 @@ class SocketIoServer extends index.tinyEmitterExports.TinyEmitter {
|
|
|
26
26
|
super();
|
|
27
27
|
this.serverName = serverName;
|
|
28
28
|
}
|
|
29
|
+
SocketDisconnectCallBack = (socket, reason) => {
|
|
30
|
+
};
|
|
31
|
+
SocketDisconnectingCallBack = (socket, reason) => {
|
|
32
|
+
};
|
|
33
|
+
SocketErrorCallBack = (socket, error) => {
|
|
34
|
+
};
|
|
29
35
|
get logPrefix() {
|
|
30
36
|
if (this.namespace) {
|
|
31
37
|
return `SocketIoServer[${this.serverName}:${this.namespace}]: `;
|
|
@@ -279,12 +285,15 @@ class SocketIoServer extends index.tinyEmitterExports.TinyEmitter {
|
|
|
279
285
|
SetupStandardEvents = (socket) => {
|
|
280
286
|
socket.on("disconnect", (reason) => {
|
|
281
287
|
this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);
|
|
288
|
+
this.SocketDisconnectCallBack(socket, reason);
|
|
282
289
|
});
|
|
283
290
|
socket.on("disconnecting", (reason) => {
|
|
284
291
|
this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);
|
|
292
|
+
this.SocketDisconnectingCallBack(socket, reason);
|
|
285
293
|
});
|
|
286
294
|
socket.on("error", (error) => {
|
|
287
295
|
this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);
|
|
296
|
+
this.SocketErrorCallBack(socket, error);
|
|
288
297
|
});
|
|
289
298
|
socket.on("__STSdisconnect", (reason) => {
|
|
290
299
|
this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);
|
package/dist/node.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.cjs","sources":["../src/socketIoServer.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { ISTSLogger, JSONObject, Sleep } from '@nsshunt/stsutils'\n\nimport { Server, Namespace, Socket, ServerOptions } from \"socket.io\";\n\nimport { STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, STSServerSocket, \n InterServerEvents } from './commonTypes'\n\n//import { createClient, RedisClientType } from 'redis';\nimport { Redis } from 'ioredis';\n\nimport { createAdapter as clusterCreateAdapter } from '@socket.io/cluster-adapter'\nimport { createAdapter } from \"@socket.io/redis-streams-adapter\";\n\nimport { TinyEmitter } from 'tiny-emitter';\n\nexport interface ISocketIoServerOpitons {\n listenPort?: number\n ioRedisMessageProcessorUrl?: string\n wssCustomPath?: string\n serverClusterMode?: boolean\n}\n \nexport abstract class SocketIoServer<ClientToServerEvents extends STSDefaultClientToServerEvents, ServerToClientEvents extends STSDefaultServerToClientEvents> extends TinyEmitter {\n protected namespace?: string\n protected socketionamespace?: Namespace<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, InterServerEvents>\n //protected socketionamespace?: Namespace<ClientToServerEvents, ServerToClientEvents, InterServerEvents>\n protected logger?: ISTSLogger\n protected io?: Server<ClientToServerEvents, ServerToClientEvents>;\n //#redisClient: RedisClientType | Redis | null = null;\n protected redisClient?: Redis;\n protected listenPort?: number;\n protected socketIoCustomPath?: string;\n protected ioRedisMessageProcessorUrl?: string;\n protected serverClusterMode?: boolean;\n protected rooms?: string[];\n protected serverName: string\n protected draining: boolean = false;\n protected attached: boolean = false;\n\n constructor(serverName: string) { // IProcessBase\n super();\n this.serverName = serverName;\n }\n\n protected get logPrefix(): string {\n if (this.namespace) {\n return `SocketIoServer[${this.serverName}:${this.namespace}]: `;\n } else {\n return `SocketIoServer[${this.serverName}:<No Namespace>]: `;\n }\n }\n\n protected LogErrorMessage(message: any) {\n if (this.logger) {\n this.logger.error(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogDebugMessage(message: any) {\n if (this.logger) {\n this.logger.debug(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogInfoMessage(message: any) {\n if (this.logger) {\n this.logger.info(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogWarnMessage(message: any) {\n if (this.logger) {\n this.logger.warn(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogSillyMessage(message: any) {\n if (this.logger) {\n this.logger.silly(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogVerboseMessage(message: any) {\n if (this.logger) {\n this.logger.verbose(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogHttpMessage(message: any) {\n if (this.logger) {\n this.logger.http(`${this.logPrefix}${message}`);\n }\n }\n\n // https://socket.io/docs/v4/middlewares/\n // https://socket.io/docs/v4/server-socket-instance/#sockethandshake\n // https://socket.io/docs/v4/server-socket-instance/#socket-middlewares\n // Use this middleward to check every incomming connection\n protected SetupConnectionMiddleware = () => { };\n\n // Use this middleware to check every packet being received\n protected SetupMessageMiddleware = (socket: STSServerSocket) => { };\n\n protected SocketConnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n protected SocketEventsCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n /*\n protected GetConfig = (socketIoServeroptions: ISocketIoServerOpitons): Partial<ServerOptions> => {\n //this.#redisClient = createClient({url: this.#options.ioRedisMessageProcessorUrl});\n //await this.#redisClient.connect();\n this.LogDebugMessage(`GetConfig() transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (socketIoServeroptions.ioRedisMessageProcessorUrl && socketIoServeroptions.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(socketIoServeroptions.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`GetConfig() createAdapter(redis): redis url: [${socketIoServeroptions.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (socketIoServeroptions.serverClusterMode && socketIoServeroptions.serverClusterMode === true) {\n this.LogDebugMessage(`GetConfig() createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (socketIoServeroptions.wssCustomPath && socketIoServeroptions.wssCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`GetConfig() wssCustomPath: [${socketIoServeroptions.wssCustomPath}]`);\n options.path = socketIoServeroptions.wssCustomPath;\n }\n\n return options;\n }\n */\n\n protected SetEngineEvents = () => {\n if (this.io) {\n this.io.engine.on(\"connection_error\", (err) => {\n this.LogWarnMessage(`SetEngineEvents(): connection_error`); // the request object\n this.LogWarnMessage(err.req); // the request object\n this.LogWarnMessage(err.code); // the error code, for example 1\n this.LogWarnMessage(err.message); // the error message, for example \"Session ID unknown\"\n this.LogWarnMessage(err.context); // some additional error context\n });\n }\n }\n\n WithLogger = (logger: ISTSLogger) => {\n this.logger = logger;\n return this;\n }\n\n WithListenPort = (listenPort: number) => {\n this.listenPort = listenPort;\n return this;\n }\n\n WithSocketIoCustomPath = (socketIoCustomPath: string) => {\n this.socketIoCustomPath = socketIoCustomPath;\n return this;\n }\n\n WithIoRedisMessageProcessorUrl = (ioRedisMessageProcessorUrl: string) => {\n this.ioRedisMessageProcessorUrl = ioRedisMessageProcessorUrl;\n return this;\n }\n\n WithClusterMode = (serverClusterMode: boolean) => {\n this.serverClusterMode = serverClusterMode;\n return this;\n }\n\n WithRooms = (rooms: string[]) => {\n this.rooms = rooms;\n return this;\n }\n\n WithNamespace = (namespace: string) => {\n this.namespace = namespace;\n return this;\n }\n\n AttachSocketIoServer = async (server: Server): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n if (!this.io) {\n this.LogInfoMessage(`AttachServer(): io = server`);\n this.io = server;\n\n this.LogInfoMessage(`AttachServer(): attached = true`);\n this.attached = true;\n\n this.LogInfoMessage(`AttachServer(): SetupNamespace()`);\n this.SetupNamespace();\n } else {\n const errorMessage = (this.attached === true ? `AttachServer(): Server already exists (from AttachServer())` : `AttachServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n StartSocketIoServer = async (): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n //this.#io = require(\"socket.io\")(this.#httpServer, options);\n if (!this.namespace) {\n const errorMessage = `StartServer(): Error: [namespace not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n if (!this.io) {\n if (!this.listenPort) {\n const errorMessage = `StartServer(): Error: [listenPort not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n this.LogDebugMessage(`StartServer(): draining = false`);\n this.draining = false;\n\n this.LogDebugMessage(`StartServer(): transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (this.ioRedisMessageProcessorUrl && this.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(this.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`StartServer(): createAdapter(redis): redis url: [${this.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (this.serverClusterMode && this.serverClusterMode === true) {\n this.LogDebugMessage(`StartServer(): createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (this.socketIoCustomPath && this.socketIoCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`StartServer(): socketIoCustomPath: [${this.socketIoCustomPath}]`);\n options.path = this.socketIoCustomPath;\n }\n\n this.LogDebugMessage(`StartServer(): new Server(): listenPort: [${this.listenPort}]`);\n this.io = new Server(this.listenPort, options);\n\n this.LogDebugMessage(`StartServer(): SetEngineEvents()`);\n this.SetEngineEvents();\n\n this.LogDebugMessage(`StartServer(): Sleeping ...`);\n await Sleep(500);\n this.LogDebugMessage(`StartServer(): Done Sleeping`);\n\n this.LogInfoMessage(`AttachServer(): attached = false`);\n this.attached = false;\n\n this.LogInfoMessage(`StartServer(): SetupNamespace()`);\n this.SetupNamespace();\n\n } else {\n const errorMessage = (this.attached === true ? `StartServer(): Server already exists (from AttachServer())` : `StartServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n DetachSockerIoServer = async (): Promise<void> => {\n if (this.io) {\n if (this.attached === true) {\n this.LogInfoMessage(`DetachServer(): StopNamespace()`);\n await this.StopNamespace();\n this.io = undefined;\n this.LogInfoMessage(`DetachServer(): attached = false`);\n this.attached = false;\n } else {\n const errorMessage = `DetachServer(): Error: [Server has not been attached. Use StopServer() to stop the socker.io server.]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `DetachServer(): Error: [no server exists to DetachServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n StopSocketIoServer = async () => {\n if (this.io) {\n if (this.attached === false) {\n // We are now draining connections\n this.LogInfoMessage(`StopServer(): draining = true`);\n this.draining = true;\n\n this.LogInfoMessage(`StopServer(): StopNamespace()`);\n await this.StopNamespace();\n\n this.LogInfoMessage(`StopServer(): io.of('/').adapter.close()`);\n await this.io.of('/').adapter.close();\n\n if (this.redisClient) {\n this.LogInfoMessage(`StopServer(): redisClient.disconnect()`);\n await this.redisClient.disconnect();\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Sleeping...)`);\n await Sleep(50);\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Done Sleeping)`);\n }\n\n // boot all current connections\n this.LogInfoMessage(`StopServer(): io.disconnectSockets()`);\n this.io.disconnectSockets();\n\n // Stop any future connections, close this server (does not close the underlying http(s) server if io server via that method\n this.LogInfoMessage(`StopServer(): io.close()`);\n this.io.close();\n\n this.LogInfoMessage(`StopServer(): io = undefined`);\n this.io = undefined;\n } else {\n const errorMessage = `StopServer(): Cannot stop an attached server. The server created must handle stop/disconnections. Use StopNamespace() instead.`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `StopServer(): Error: [no server exists to StopServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n LeaveRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`LeaveRoom(): Leaving room [${room}]`);\n socket.leave(room);\n };\n\n JoinRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`JoinRoom(): Socket joining room [${room}], ID: [${socket.id}]`);\n socket.join(room);\n };\n\n protected StopNamespace = async() => {\n this.LogInfoMessage(`StopServer(): CloseNamespaceAdaptors()`);\n await this.CloseNamespaceAdaptors();\n\n this.LogInfoMessage(`StopServer(): DisconnectNamespaceSockets()`);\n this.DisconnectNamespaceSockets();\n }\n\n protected SetupStandardEvents = (socket: STSServerSocket): void => {\n socket.on('disconnect', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on('disconnecting', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on('error', (error: Error) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);\n });\n\n socket.on(\"__STSdisconnect\", (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on(\"__STSdisconnecting\", (reason, callBackResult) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnecting: socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n callBackResult(\"__STSdisconnecting accepted by server.\");\n });\n\n socket.on('__STSjoinRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSjoinRoom: room: [${room}], socket: [${socket.id}]`);\n this.JoinRoom(socket, room)\n });\n });\n\n socket.on('__STSleaveRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSleaveRoom: room: [${room}], socket: [${socket.id}]`);\n this.LeaveRoom(socket, room);\n });\n });\n\n socket.on('__STSsendToRoom', (rooms: string[], payload: { command: string, payload: JSONObject }): void => {\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoom: Sending to room [${room}], ID: [${socket.id}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).emit(payload.command as any, payload);\n }\n });\n });\n\n socket.on('__STSsendToRoomWithCallback', (room: string, timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n cb(errorResponse);\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n cb(dataResponse);\n }\n });\n }\n });\n\n socket.on('__STSsendToRoomsWithCallback', (rooms: string[], timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n const responses: any[] = [ ];\n\n const timeoutForComplete = setTimeout(() => {\n // for this timeout case, sent back the error response and the responses we have received so far ...\n responses.push({\n room: '',\n responses: {\n error: true,\n errorName: 'timeout',\n errorMessage: `__STSsendToRoomsWithCallback timeout: [${timeout}] before all responses received`\n }\n });\n cb(responses);\n }, timeout).unref();\n\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n responses.push({\n room,\n responses: errorResponse\n });\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n responses.push({\n room,\n responses: dataResponse\n });\n }\n if (responses.length === rooms.length) {\n clearTimeout(timeoutForComplete);\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: All complete, Responses Count: [${responses.length}] Invoke call back(responses)`);\n cb(responses);\n }\n });\n }\n });\n });\n }\n\n protected ConnectionDrainingConnectionMiddleware = (): void => {\n if (this.socketionamespace) {\n this.socketionamespace.use((socket, next) => {\n if (this.draining === true) {\n next(new Error(`ConnectionDrainingConnectionMiddleware(): Error: [server connections draining (from a server disconnect)]`));\n } else {\n next();\n }\n });\n }\n }\n \n protected SetupNamespace = (): SocketIoServer<ClientToServerEvents, ServerToClientEvents> => {\n // Create STS Command Centre Client namespace\n if (this.io) {\n this.LogDebugMessage(`SetupNamespace(): socketionamespace = io.of('/${this.namespace}/'`);\n this.socketionamespace = this.io.of(`/${this.namespace}/`);\n\n this.LogDebugMessage(`SetupNamespace(): ConnectionDrainingConnectionMiddleware()`);\n this.ConnectionDrainingConnectionMiddleware();\n\n this.LogDebugMessage(`SetupNamespace(): SetupConnectionMiddleware()`);\n this.SetupConnectionMiddleware();\n\n this.socketionamespace.on(\"connection\", socket => {\n this.LogDebugMessage(`SetupNamespace(): Socket connected, ID: [${socket.id}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (auth): [${JSON.stringify(socket.handshake.auth)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (host): [${JSON.stringify(socket.handshake.headers.host)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (url): [${JSON.stringify(socket.handshake.url)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake: [${JSON.stringify(socket.handshake)}]`);\n\n this.LogDebugMessage(`SetupNamespace(): SetupMessageMiddleware(): Socket: [${socket.id}]`);\n this.SetupMessageMiddleware(socket);\n\n if (this.rooms && this.rooms.length > 0) {\n this.rooms.map((room) => {\n this.LogDebugMessage(`SetupNamespace(): Joining Room: [${room}], Socket: [${socket.id}]`);\n this.JoinRoom(socket, room);\n });\n }\n\n this.LogDebugMessage(`SetupNamespace(): SetupStandardEvents: Socket: [${socket.id}]`);\n this.SetupStandardEvents(socket);\n\n setTimeout(() => {\n this.LogDebugMessage(`SetupNamespace(): SocketConnectCallBack(): Socket: [${socket.id}]`);\n this.SocketConnectCallBack(socket);\n }, 0);\n\n this.LogDebugMessage(`SetupNamespace(): SocketEventsCallBack(): Socket: [${socket.id}]`);\n this.SocketEventsCallBack(socket);\n });\n } else {\n const errorMessage = `SetupNamespace(): Error: [No server attached]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n return this;\n }\n\n protected CloseNamespaceAdaptors = async (): Promise<void> => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`CloseNamespaceAdaptors(): this.socketionamespace.adapter.close()`);\n await this.socketionamespace.adapter.close();\n }\n }\n\n protected DisconnectNamespaceSockets = (): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`DisconnectNamespaceSockets(): this.socketionamespace.disconnectSockets()`);\n this.socketionamespace.disconnectSockets();\n this.socketionamespace = undefined;\n }\n }\n}\n"],"names":["TinyEmitter","Redis","createAdapter","clusterCreateAdapter","Server","Sleep"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node.cjs","sources":["../src/socketIoServer.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { ISTSLogger, JSONObject, Sleep } from '@nsshunt/stsutils'\n\nimport { Server, Namespace, Socket, ServerOptions } from \"socket.io\";\n\nimport { STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, STSServerSocket, \n InterServerEvents } from './commonTypes'\n\n//import { createClient, RedisClientType } from 'redis';\nimport { Redis } from 'ioredis';\n\nimport { createAdapter as clusterCreateAdapter } from '@socket.io/cluster-adapter'\nimport { createAdapter } from \"@socket.io/redis-streams-adapter\";\n\nimport { TinyEmitter } from 'tiny-emitter';\n\nexport interface ISocketIoServerOpitons {\n listenPort?: number\n ioRedisMessageProcessorUrl?: string\n wssCustomPath?: string\n serverClusterMode?: boolean\n}\n \nexport abstract class SocketIoServer<ClientToServerEvents extends STSDefaultClientToServerEvents, ServerToClientEvents extends STSDefaultServerToClientEvents> extends TinyEmitter {\n protected namespace?: string\n protected socketionamespace?: Namespace<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, InterServerEvents>\n //protected socketionamespace?: Namespace<ClientToServerEvents, ServerToClientEvents, InterServerEvents>\n protected logger?: ISTSLogger\n protected io?: Server<ClientToServerEvents, ServerToClientEvents>;\n //#redisClient: RedisClientType | Redis | null = null;\n protected redisClient?: Redis;\n protected listenPort?: number;\n protected socketIoCustomPath?: string;\n protected ioRedisMessageProcessorUrl?: string;\n protected serverClusterMode?: boolean;\n protected rooms?: string[];\n protected serverName: string\n protected draining: boolean = false;\n protected attached: boolean = false;\n\n constructor(serverName: string) { // IProcessBase\n super();\n this.serverName = serverName;\n }\n\n protected SocketDisconnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string): void => { };\n\n protected SocketDisconnectingCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string): void => { };\n\n protected SocketErrorCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, error: Error): void => { };\n\n protected get logPrefix(): string {\n if (this.namespace) {\n return `SocketIoServer[${this.serverName}:${this.namespace}]: `;\n } else {\n return `SocketIoServer[${this.serverName}:<No Namespace>]: `;\n }\n }\n\n protected LogErrorMessage(message: any) {\n if (this.logger) {\n this.logger.error(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogDebugMessage(message: any) {\n if (this.logger) {\n this.logger.debug(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogInfoMessage(message: any) {\n if (this.logger) {\n this.logger.info(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogWarnMessage(message: any) {\n if (this.logger) {\n this.logger.warn(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogSillyMessage(message: any) {\n if (this.logger) {\n this.logger.silly(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogVerboseMessage(message: any) {\n if (this.logger) {\n this.logger.verbose(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogHttpMessage(message: any) {\n if (this.logger) {\n this.logger.http(`${this.logPrefix}${message}`);\n }\n }\n\n // https://socket.io/docs/v4/middlewares/\n // https://socket.io/docs/v4/server-socket-instance/#sockethandshake\n // https://socket.io/docs/v4/server-socket-instance/#socket-middlewares\n // Use this middleward to check every incomming connection\n protected SetupConnectionMiddleware = () => { };\n\n // Use this middleware to check every packet being received\n protected SetupMessageMiddleware = (socket: STSServerSocket) => { };\n\n protected SocketConnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n protected SocketEventsCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n /*\n protected GetConfig = (socketIoServeroptions: ISocketIoServerOpitons): Partial<ServerOptions> => {\n //this.#redisClient = createClient({url: this.#options.ioRedisMessageProcessorUrl});\n //await this.#redisClient.connect();\n this.LogDebugMessage(`GetConfig() transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (socketIoServeroptions.ioRedisMessageProcessorUrl && socketIoServeroptions.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(socketIoServeroptions.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`GetConfig() createAdapter(redis): redis url: [${socketIoServeroptions.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (socketIoServeroptions.serverClusterMode && socketIoServeroptions.serverClusterMode === true) {\n this.LogDebugMessage(`GetConfig() createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (socketIoServeroptions.wssCustomPath && socketIoServeroptions.wssCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`GetConfig() wssCustomPath: [${socketIoServeroptions.wssCustomPath}]`);\n options.path = socketIoServeroptions.wssCustomPath;\n }\n\n return options;\n }\n */\n\n protected SetEngineEvents = () => {\n if (this.io) {\n this.io.engine.on(\"connection_error\", (err) => {\n this.LogWarnMessage(`SetEngineEvents(): connection_error`); // the request object\n this.LogWarnMessage(err.req); // the request object\n this.LogWarnMessage(err.code); // the error code, for example 1\n this.LogWarnMessage(err.message); // the error message, for example \"Session ID unknown\"\n this.LogWarnMessage(err.context); // some additional error context\n });\n }\n }\n\n WithLogger = (logger: ISTSLogger) => {\n this.logger = logger;\n return this;\n }\n\n WithListenPort = (listenPort: number) => {\n this.listenPort = listenPort;\n return this;\n }\n\n WithSocketIoCustomPath = (socketIoCustomPath: string) => {\n this.socketIoCustomPath = socketIoCustomPath;\n return this;\n }\n\n WithIoRedisMessageProcessorUrl = (ioRedisMessageProcessorUrl: string) => {\n this.ioRedisMessageProcessorUrl = ioRedisMessageProcessorUrl;\n return this;\n }\n\n WithClusterMode = (serverClusterMode: boolean) => {\n this.serverClusterMode = serverClusterMode;\n return this;\n }\n\n WithRooms = (rooms: string[]) => {\n this.rooms = rooms;\n return this;\n }\n\n WithNamespace = (namespace: string) => {\n this.namespace = namespace;\n return this;\n }\n\n AttachSocketIoServer = async (server: Server): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n if (!this.io) {\n this.LogInfoMessage(`AttachServer(): io = server`);\n this.io = server;\n\n this.LogInfoMessage(`AttachServer(): attached = true`);\n this.attached = true;\n\n this.LogInfoMessage(`AttachServer(): SetupNamespace()`);\n this.SetupNamespace();\n } else {\n const errorMessage = (this.attached === true ? `AttachServer(): Server already exists (from AttachServer())` : `AttachServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n StartSocketIoServer = async (): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n //this.#io = require(\"socket.io\")(this.#httpServer, options);\n if (!this.namespace) {\n const errorMessage = `StartServer(): Error: [namespace not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n if (!this.io) {\n if (!this.listenPort) {\n const errorMessage = `StartServer(): Error: [listenPort not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n this.LogDebugMessage(`StartServer(): draining = false`);\n this.draining = false;\n\n this.LogDebugMessage(`StartServer(): transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (this.ioRedisMessageProcessorUrl && this.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(this.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`StartServer(): createAdapter(redis): redis url: [${this.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (this.serverClusterMode && this.serverClusterMode === true) {\n this.LogDebugMessage(`StartServer(): createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (this.socketIoCustomPath && this.socketIoCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`StartServer(): socketIoCustomPath: [${this.socketIoCustomPath}]`);\n options.path = this.socketIoCustomPath;\n }\n\n this.LogDebugMessage(`StartServer(): new Server(): listenPort: [${this.listenPort}]`);\n this.io = new Server(this.listenPort, options);\n\n this.LogDebugMessage(`StartServer(): SetEngineEvents()`);\n this.SetEngineEvents();\n\n this.LogDebugMessage(`StartServer(): Sleeping ...`);\n await Sleep(500);\n this.LogDebugMessage(`StartServer(): Done Sleeping`);\n\n this.LogInfoMessage(`AttachServer(): attached = false`);\n this.attached = false;\n\n this.LogInfoMessage(`StartServer(): SetupNamespace()`);\n this.SetupNamespace();\n\n } else {\n const errorMessage = (this.attached === true ? `StartServer(): Server already exists (from AttachServer())` : `StartServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n DetachSockerIoServer = async (): Promise<void> => {\n if (this.io) {\n if (this.attached === true) {\n this.LogInfoMessage(`DetachServer(): StopNamespace()`);\n await this.StopNamespace();\n this.io = undefined;\n this.LogInfoMessage(`DetachServer(): attached = false`);\n this.attached = false;\n } else {\n const errorMessage = `DetachServer(): Error: [Server has not been attached. Use StopServer() to stop the socker.io server.]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `DetachServer(): Error: [no server exists to DetachServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n StopSocketIoServer = async () => {\n if (this.io) {\n if (this.attached === false) {\n // We are now draining connections\n this.LogInfoMessage(`StopServer(): draining = true`);\n this.draining = true;\n\n this.LogInfoMessage(`StopServer(): StopNamespace()`);\n await this.StopNamespace();\n\n this.LogInfoMessage(`StopServer(): io.of('/').adapter.close()`);\n await this.io.of('/').adapter.close();\n\n if (this.redisClient) {\n this.LogInfoMessage(`StopServer(): redisClient.disconnect()`);\n await this.redisClient.disconnect();\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Sleeping...)`);\n await Sleep(50);\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Done Sleeping)`);\n }\n\n // boot all current connections\n this.LogInfoMessage(`StopServer(): io.disconnectSockets()`);\n this.io.disconnectSockets();\n\n // Stop any future connections, close this server (does not close the underlying http(s) server if io server via that method\n this.LogInfoMessage(`StopServer(): io.close()`);\n this.io.close();\n\n this.LogInfoMessage(`StopServer(): io = undefined`);\n this.io = undefined;\n } else {\n const errorMessage = `StopServer(): Cannot stop an attached server. The server created must handle stop/disconnections. Use StopNamespace() instead.`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `StopServer(): Error: [no server exists to StopServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n LeaveRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`LeaveRoom(): Leaving room [${room}]`);\n socket.leave(room);\n };\n\n JoinRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`JoinRoom(): Socket joining room [${room}], ID: [${socket.id}]`);\n socket.join(room);\n };\n\n protected StopNamespace = async() => {\n this.LogInfoMessage(`StopServer(): CloseNamespaceAdaptors()`);\n await this.CloseNamespaceAdaptors();\n\n this.LogInfoMessage(`StopServer(): DisconnectNamespaceSockets()`);\n this.DisconnectNamespaceSockets();\n }\n\n protected SetupStandardEvents = (socket: STSServerSocket): void => {\n socket.on('disconnect', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n this.SocketDisconnectCallBack(socket, reason);\n });\n\n socket.on('disconnecting', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n this.SocketDisconnectingCallBack(socket, reason);\n });\n\n socket.on('error', (error: Error) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);\n this.SocketErrorCallBack(socket, error);\n });\n\n socket.on(\"__STSdisconnect\", (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on(\"__STSdisconnecting\", (reason, callBackResult) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnecting: socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n callBackResult(\"__STSdisconnecting accepted by server.\");\n });\n\n socket.on('__STSjoinRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSjoinRoom: room: [${room}], socket: [${socket.id}]`);\n this.JoinRoom(socket, room)\n });\n });\n\n socket.on('__STSleaveRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSleaveRoom: room: [${room}], socket: [${socket.id}]`);\n this.LeaveRoom(socket, room);\n });\n });\n\n socket.on('__STSsendToRoom', (rooms: string[], payload: { command: string, payload: JSONObject }): void => {\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoom: Sending to room [${room}], ID: [${socket.id}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).emit(payload.command as any, payload);\n }\n });\n });\n\n socket.on('__STSsendToRoomWithCallback', (room: string, timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n cb(errorResponse);\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n cb(dataResponse);\n }\n });\n }\n });\n\n socket.on('__STSsendToRoomsWithCallback', (rooms: string[], timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n const responses: any[] = [ ];\n\n const timeoutForComplete = setTimeout(() => {\n // for this timeout case, sent back the error response and the responses we have received so far ...\n responses.push({\n room: '',\n responses: {\n error: true,\n errorName: 'timeout',\n errorMessage: `__STSsendToRoomsWithCallback timeout: [${timeout}] before all responses received`\n }\n });\n cb(responses);\n }, timeout).unref();\n\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n responses.push({\n room,\n responses: errorResponse\n });\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n responses.push({\n room,\n responses: dataResponse\n });\n }\n if (responses.length === rooms.length) {\n clearTimeout(timeoutForComplete);\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: All complete, Responses Count: [${responses.length}] Invoke call back(responses)`);\n cb(responses);\n }\n });\n }\n });\n });\n }\n\n protected ConnectionDrainingConnectionMiddleware = (): void => {\n if (this.socketionamespace) {\n this.socketionamespace.use((socket, next) => {\n if (this.draining === true) {\n next(new Error(`ConnectionDrainingConnectionMiddleware(): Error: [server connections draining (from a server disconnect)]`));\n } else {\n next();\n }\n });\n }\n }\n \n protected SetupNamespace = (): SocketIoServer<ClientToServerEvents, ServerToClientEvents> => {\n // Create STS Command Centre Client namespace\n if (this.io) {\n this.LogDebugMessage(`SetupNamespace(): socketionamespace = io.of('/${this.namespace}/'`);\n this.socketionamespace = this.io.of(`/${this.namespace}/`);\n\n this.LogDebugMessage(`SetupNamespace(): ConnectionDrainingConnectionMiddleware()`);\n this.ConnectionDrainingConnectionMiddleware();\n\n this.LogDebugMessage(`SetupNamespace(): SetupConnectionMiddleware()`);\n this.SetupConnectionMiddleware();\n\n this.socketionamespace.on(\"connection\", socket => {\n this.LogDebugMessage(`SetupNamespace(): Socket connected, ID: [${socket.id}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (auth): [${JSON.stringify(socket.handshake.auth)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (host): [${JSON.stringify(socket.handshake.headers.host)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (url): [${JSON.stringify(socket.handshake.url)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake: [${JSON.stringify(socket.handshake)}]`);\n\n this.LogDebugMessage(`SetupNamespace(): SetupMessageMiddleware(): Socket: [${socket.id}]`);\n this.SetupMessageMiddleware(socket);\n\n if (this.rooms && this.rooms.length > 0) {\n this.rooms.map((room) => {\n this.LogDebugMessage(`SetupNamespace(): Joining Room: [${room}], Socket: [${socket.id}]`);\n this.JoinRoom(socket, room);\n });\n }\n\n this.LogDebugMessage(`SetupNamespace(): SetupStandardEvents: Socket: [${socket.id}]`);\n this.SetupStandardEvents(socket);\n\n setTimeout(() => {\n this.LogDebugMessage(`SetupNamespace(): SocketConnectCallBack(): Socket: [${socket.id}]`);\n this.SocketConnectCallBack(socket);\n }, 0);\n\n this.LogDebugMessage(`SetupNamespace(): SocketEventsCallBack(): Socket: [${socket.id}]`);\n this.SocketEventsCallBack(socket);\n });\n } else {\n const errorMessage = `SetupNamespace(): Error: [No server attached]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n return this;\n }\n\n protected CloseNamespaceAdaptors = async (): Promise<void> => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`CloseNamespaceAdaptors(): this.socketionamespace.adapter.close()`);\n await this.socketionamespace.adapter.close();\n }\n }\n\n protected DisconnectNamespaceSockets = (): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`DisconnectNamespaceSockets(): this.socketionamespace.disconnectSockets()`);\n this.socketionamespace.disconnectSockets();\n this.socketionamespace = undefined;\n }\n }\n}\n"],"names":["TinyEmitter","Redis","createAdapter","clusterCreateAdapter","Server","Sleep"],"mappings":";;;;;;;;AAuBO,MAAe,uBAAiJA,MAAAA,mBAAAA,YAAY;AAAA,EACrK;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAoB;AAAA,EACpB,WAAoB;AAAA,EAE9B,YAAY,YAAoB;AAC5B,UAAA;AACA,SAAK,aAAa;AAAA,EACtB;AAAA,EAEU,2BAA2B,CAAC,QAA4D,WAAyB;AAAA,EAAE;AAAA,EAEnH,8BAA8B,CAAC,QAA4D,WAAyB;AAAA,EAAE;AAAA,EAEtH,sBAAsB,CAAC,QAA4D,UAAuB;AAAA,EAAE;AAAA,EAEtH,IAAc,YAAoB;AAC9B,QAAI,KAAK,WAAW;AAChB,aAAO,kBAAkB,KAAK,UAAU,IAAI,KAAK,SAAS;AAAA,IAC9D,OAAO;AACH,aAAO,kBAAkB,KAAK,UAAU;AAAA,IAC5C;AAAA,EACJ;AAAA,EAEU,gBAAgB,SAAc;AACpC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,MAAM,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IACnD;AAAA,EACJ;AAAA,EAEU,gBAAgB,SAAc;AACpC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,MAAM,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IACnD;AAAA,EACJ;AAAA,EAEU,eAAe,SAAc;AACnC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,KAAK,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IAClD;AAAA,EACJ;AAAA,EAEU,eAAe,SAAc;AACnC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,KAAK,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IAClD;AAAA,EACJ;AAAA,EAEU,gBAAgB,SAAc;AACpC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,MAAM,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IACnD;AAAA,EACJ;AAAA,EAEU,kBAAkB,SAAc;AACtC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,QAAQ,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IACrD;AAAA,EACJ;AAAA,EAEU,eAAe,SAAc;AACnC,QAAI,KAAK,QAAQ;AACb,WAAK,OAAO,KAAK,GAAG,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,IAClD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,4BAA4B,MAAM;AAAA,EAAE;AAAA;AAAA,EAGpC,yBAAyB,CAAC,WAA4B;AAAA,EAAE;AAAA,EAExD,wBAAwB,CAAC,WAAqE;AAAA,EAAE;AAAA,EAEhG,uBAAuB,CAAC,WAAqE;AAAA,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6B/F,kBAAkB,MAAM;AAC9B,QAAI,KAAK,IAAI;AACT,WAAK,GAAG,OAAO,GAAG,oBAAoB,CAAC,QAAQ;AAC3C,aAAK,eAAe,qCAAqC;AACzD,aAAK,eAAe,IAAI,GAAG;AAC3B,aAAK,eAAe,IAAI,IAAI;AAC5B,aAAK,eAAe,IAAI,OAAO;AAC/B,aAAK,eAAe,IAAI,OAAO;AAAA,MACnC,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,aAAa,CAAC,WAAuB;AACjC,SAAK,SAAS;AACd,WAAO;AAAA,EACX;AAAA,EAEA,iBAAiB,CAAC,eAAuB;AACrC,SAAK,aAAa;AAClB,WAAO;AAAA,EACX;AAAA,EAEA,yBAAyB,CAAC,uBAA+B;AACrD,SAAK,qBAAqB;AAC1B,WAAO;AAAA,EACX;AAAA,EAEA,iCAAiC,CAAC,+BAAuC;AACrE,SAAK,6BAA6B;AAClC,WAAO;AAAA,EACX;AAAA,EAEA,kBAAkB,CAAC,sBAA+B;AAC9C,SAAK,oBAAoB;AACzB,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,CAAC,UAAoB;AAC7B,SAAK,QAAQ;AACb,WAAO;AAAA,EACX;AAAA,EAEA,gBAAgB,CAAC,cAAsB;AACnC,SAAK,YAAY;AACjB,WAAO;AAAA,EACX;AAAA,EAEA,uBAAuB,OAAO,WAAwF;AAClH,QAAI,CAAC,KAAK,IAAI;AACV,WAAK,eAAe,6BAA6B;AACjD,WAAK,KAAK;AAEV,WAAK,eAAe,iCAAiC;AACrD,WAAK,WAAW;AAEhB,WAAK,eAAe,kCAAkC;AACtD,WAAK,eAAA;AAAA,IACT,OAAO;AACH,YAAM,eAAgB,KAAK,aAAa,OAAO,gEAAgE;AAC/G,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,sBAAsB,YAAiF;AAEnG,QAAI,CAAC,KAAK,WAAW;AACjB,YAAM,eAAe;AACrB,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AAEA,QAAI,CAAC,KAAK,IAAI;AACV,UAAI,CAAC,KAAK,YAAY;AAClB,cAAM,eAAe;AACrB,aAAK,gBAAgB,YAAY;AACjC,cAAM,IAAI,MAAM,YAAY;AAAA,MAChC;AAEA,WAAK,gBAAgB,iCAAiC;AACtD,WAAK,WAAW;AAEhB,WAAK,gBAAgB,4CAA4C;AACjE,YAAM,UAAkC;AAAA,QACpC,YAAY,CAAE,WAAY;AAAA;AAAA,MAAA;AAG9B,UAAI,KAAK,8BAA8B,KAAK,+BAA+B,IAAI;AAC3E,aAAK,cAAc,IAAIC,cAAM,KAAK,0BAA0B;AAC5D,aAAK,gBAAgB,oDAAoD,KAAK,0BAA0B,GAAG;AAC3G,gBAAQ,UAAUC,kCAAc,KAAK,WAAW;AAAA,MACpD,WAAW,KAAK,qBAAqB,KAAK,sBAAsB,MAAM;AAClE,aAAK,gBAAgB,uCAAuC;AAC5D,gBAAQ,UAAUC,6BAAA;AAAA,MACtB;AAEA,UAAI,KAAK,sBAAsB,KAAK,mBAAmB,cAAc,EAAE,MAAM,GAAG;AAC5E,aAAK,gBAAgB,uCAAuC,KAAK,kBAAkB,GAAG;AACtF,gBAAQ,OAAO,KAAK;AAAA,MACxB;AAEA,WAAK,gBAAgB,6CAA6C,KAAK,UAAU,GAAG;AACpF,WAAK,KAAK,IAAIC,UAAAA,OAAO,KAAK,YAAY,OAAO;AAE7C,WAAK,gBAAgB,kCAAkC;AACvD,WAAK,gBAAA;AAEL,WAAK,gBAAgB,6BAA6B;AAClD,YAAMC,SAAAA,MAAM,GAAG;AACf,WAAK,gBAAgB,8BAA8B;AAEnD,WAAK,eAAe,kCAAkC;AACtD,WAAK,WAAW;AAEhB,WAAK,eAAe,iCAAiC;AACrD,WAAK,eAAA;AAAA,IAET,OAAO;AACH,YAAM,eAAgB,KAAK,aAAa,OAAO,+DAA+D;AAC9G,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,uBAAuB,YAA2B;AAC9C,QAAI,KAAK,IAAI;AACT,UAAI,KAAK,aAAa,MAAM;AACxB,aAAK,eAAe,iCAAiC;AACrD,cAAM,KAAK,cAAA;AACX,aAAK,KAAK;AACV,aAAK,eAAe,kCAAkC;AACtD,aAAK,WAAW;AAAA,MACpB,OAAO;AACH,cAAM,eAAe;AACrB,aAAK,gBAAgB,YAAY;AACjC,cAAM,IAAI,MAAM,YAAY;AAAA,MAChC;AAAA,IACJ,OAAO;AACH,YAAM,eAAe;AACrB,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AAAA,EACJ;AAAA,EAEA,qBAAqB,YAAY;AAC7B,QAAI,KAAK,IAAI;AACT,UAAI,KAAK,aAAa,OAAO;AAEzB,aAAK,eAAe,+BAA+B;AACnD,aAAK,WAAW;AAEhB,aAAK,eAAe,+BAA+B;AACnD,cAAM,KAAK,cAAA;AAEX,aAAK,eAAe,0CAA0C;AAC9D,cAAM,KAAK,GAAG,GAAG,GAAG,EAAE,QAAQ,MAAA;AAE9B,YAAI,KAAK,aAAa;AAClB,eAAK,eAAe,wCAAwC;AAC5D,gBAAM,KAAK,YAAY,WAAA;AACvB,eAAK,eAAe,sDAAsD;AAC1E,gBAAMA,SAAAA,MAAM,EAAE;AACd,eAAK,eAAe,wDAAwD;AAAA,QAChF;AAGA,aAAK,eAAe,sCAAsC;AAC1D,aAAK,GAAG,kBAAA;AAGR,aAAK,eAAe,0BAA0B;AAC9C,aAAK,GAAG,MAAA;AAER,aAAK,eAAe,8BAA8B;AAClD,aAAK,KAAK;AAAA,MACd,OAAO;AACH,cAAM,eAAe;AACrB,aAAK,gBAAgB,YAAY;AACjC,cAAM,IAAI,MAAM,YAAY;AAAA,MAChC;AAAA,IACJ,OAAO;AACH,YAAM,eAAe;AACrB,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AAAA,EACJ;AAAA,EAEA,YAAY,CAAC,QAAyB,SAAuB;AACzD,SAAK,gBAAgB,8BAA8B,IAAI,GAAG;AAC1D,WAAO,MAAM,IAAI;AAAA,EACrB;AAAA,EAEA,WAAW,CAAC,QAAyB,SAAuB;AACxD,SAAK,gBAAgB,oCAAoC,IAAI,WAAW,OAAO,EAAE,GAAG;AACpF,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA,EAEU,gBAAgB,YAAW;AACjC,SAAK,eAAe,wCAAwC;AAC5D,UAAM,KAAK,uBAAA;AAEX,SAAK,eAAe,4CAA4C;AAChE,SAAK,2BAAA;AAAA,EACT;AAAA,EAEU,sBAAsB,CAAC,WAAkC;AAC/D,WAAO,GAAG,cAAc,CAAC,WAAmB;AACxC,WAAK,gBAAgB,kDAAkD,OAAO,EAAE,eAAe,MAAM,GAAG;AACxG,WAAK,yBAAyB,QAAQ,MAAM;AAAA,IAChD,CAAC;AAED,WAAO,GAAG,iBAAiB,CAAC,WAAmB;AAC3C,WAAK,gBAAgB,qDAAqD,OAAO,EAAE,eAAe,MAAM,GAAG;AAC3G,WAAK,4BAA4B,QAAQ,MAAM;AAAA,IACnD,CAAC;AAED,WAAO,GAAG,SAAS,CAAC,UAAiB;AACjC,WAAK,gBAAgB,6CAA6C,OAAO,EAAE,cAAc,KAAK,GAAG;AACjG,WAAK,oBAAoB,QAAQ,KAAK;AAAA,IAC1C,CAAC;AAED,WAAO,GAAG,mBAAmB,CAAC,WAAmB;AAC7C,WAAK,gBAAgB,mEAAmE,OAAO,EAAE,eAAe,MAAM,GAAG;AAAA,IAC7H,CAAC;AAED,WAAO,GAAG,sBAAsB,CAAC,QAAQ,mBAAmB;AACxD,WAAK,gBAAgB,yEAAyE,OAAO,EAAE,eAAe,MAAM,GAAG;AAC/H,qBAAe,wCAAwC;AAAA,IAC3D,CAAC;AAED,WAAO,GAAG,iBAAiB,CAAC,UAA0B;AAClD,YAAM,QAAQ,CAAC,SAAS;AACpB,aAAK,gBAAgB,gDAAgD,IAAI,eAAe,OAAO,EAAE,GAAG;AACpG,aAAK,SAAS,QAAQ,IAAI;AAAA,MAC9B,CAAC;AAAA,IACL,CAAC;AAED,WAAO,GAAG,kBAAkB,CAAC,UAA0B;AACnD,YAAM,QAAQ,CAAC,SAAS;AACpB,aAAK,gBAAgB,iDAAiD,IAAI,eAAe,OAAO,EAAE,GAAG;AACrG,aAAK,UAAU,QAAQ,IAAI;AAAA,MAC/B,CAAC;AAAA,IACL,CAAC;AAED,WAAO,GAAG,mBAAmB,CAAC,OAAiB,YAA4D;AACvG,YAAM,QAAQ,CAAC,SAAS;AACpB,YAAI,KAAK,mBAAmB;AACxB,eAAK,gBAAgB,uEAAuE,IAAI,WAAW,OAAO,EAAE,gBAAgB,QAAQ,OAAO,GAAG;AACtJ,eAAK,kBAAkB,GAAG,IAAI,EAAE,KAAK,QAAQ,SAAgB,OAAO;AAAA,QACxE;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,WAAO,GAAG,+BAA+B,CAAC,MAAc,SAAiB,SAAmD,OAAyC;AACjK,UAAI,KAAK,mBAAmB;AACxB,aAAK,gBAAgB,mFAAmF,IAAI,WAAW,OAAO,EAAE,gBAAgB,OAAO,gBAAgB,QAAQ,OAAO,GAAG;AACzL,aAAK,kBAAkB,GAAG,IAAI,EAAE,QAAQ,OAAO,EAAE,KAAK,QAAQ,SAAgB,SAAS,CAAC,KAAY,iBAA+B;AAC/H,cAAI,KAAK;AACL,oBAAQ,MAAM,GAAG;AACjB,kBAAM,gBAAgB;AAAA,cAClB,OAAO;AAAA,cACP,WAAW,IAAI;AAAA,cACf,cAAc,IAAI;AAAA;AAAA;AAAA,YAAA;AAItB,iBAAK,gBAAgB,0EAA0E,KAAK,UAAU,aAAa,CAAC,GAAG;AAC/H,eAAG,aAAa;AAAA,UACpB,OAAO;AACH,iBAAK,gBAAgB,kEAAkE,KAAK,UAAU,YAAY,CAAC,GAAG;AACtH,eAAG,YAAY;AAAA,UACnB;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAED,WAAO,GAAG,gCAAgC,CAAC,OAAiB,SAAiB,SAAmD,OAAyC;AACrK,YAAM,YAAmB,CAAA;AAEzB,YAAM,qBAAqB,WAAW,MAAM;AAExC,kBAAU,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW;AAAA,YACP,OAAO;AAAA,YACP,WAAW;AAAA,YACX,cAAc,0CAA0C,OAAO;AAAA,UAAA;AAAA,QACnE,CACH;AACD,WAAG,SAAS;AAAA,MAChB,GAAG,OAAO,EAAE,MAAA;AAEZ,YAAM,QAAQ,CAAC,SAAS;AACpB,YAAI,KAAK,mBAAmB;AACxB,eAAK,gBAAgB,oFAAoF,IAAI,WAAW,OAAO,EAAE,gBAAgB,OAAO,gBAAgB,QAAQ,OAAO,GAAG;AAC1L,eAAK,kBAAkB,GAAG,IAAI,EAAE,QAAQ,OAAO,EAAE,KAAK,QAAQ,SAAgB,SAAS,CAAC,KAAY,iBAA+B;AAC/H,gBAAI,KAAK;AACL,sBAAQ,MAAM,GAAG;AACjB,oBAAM,gBAAgB;AAAA,gBAClB,OAAO;AAAA,gBACP,WAAW,IAAI;AAAA,gBACf,cAAc,IAAI;AAAA;AAAA;AAAA,cAAA;AAItB,mBAAK,gBAAgB,0EAA0E,KAAK,UAAU,aAAa,CAAC,GAAG;AAC/H,wBAAU,KAAK;AAAA,gBACX;AAAA,gBACA,WAAW;AAAA,cAAA,CACd;AAAA,YACL,OAAO;AACH,mBAAK,gBAAgB,kEAAkE,KAAK,UAAU,YAAY,CAAC,GAAG;AACtH,wBAAU,KAAK;AAAA,gBACX;AAAA,gBACA,WAAW;AAAA,cAAA,CACd;AAAA,YACL;AACA,gBAAI,UAAU,WAAW,MAAM,QAAQ;AACnC,2BAAa,kBAAkB;AAC/B,mBAAK,gBAAgB,mGAAmG,UAAU,MAAM,+BAA+B;AACvK,iBAAG,SAAS;AAAA,YAChB;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEU,yCAAyC,MAAY;AAC3D,QAAI,KAAK,mBAAmB;AACxB,WAAK,kBAAkB,IAAI,CAAC,QAAQ,SAAS;AACzC,YAAI,KAAK,aAAa,MAAM;AACxB,eAAK,IAAI,MAAM,2GAA2G,CAAC;AAAA,QAC/H,OAAO;AACH,eAAA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEU,iBAAiB,MAAkE;AAEzF,QAAI,KAAK,IAAI;AACT,WAAK,gBAAgB,iDAAiD,KAAK,SAAS,IAAI;AACxF,WAAK,oBAAoB,KAAK,GAAG,GAAG,IAAI,KAAK,SAAS,GAAG;AAEzD,WAAK,gBAAgB,4DAA4D;AACjF,WAAK,uCAAA;AAEL,WAAK,gBAAgB,+CAA+C;AACpE,WAAK,0BAAA;AAEL,WAAK,kBAAkB,GAAG,cAAc,CAAA,WAAU;AAC9C,aAAK,gBAAgB,4CAA4C,OAAO,EAAE,GAAG;AAC7E,aAAK,gBAAgB,uDAAuD,KAAK,UAAU,OAAO,UAAU,IAAI,CAAC,GAAG;AACpH,aAAK,gBAAgB,uDAAuD,KAAK,UAAU,OAAO,UAAU,QAAQ,IAAI,CAAC,GAAG;AAC5H,aAAK,gBAAgB,sDAAsD,KAAK,UAAU,OAAO,UAAU,GAAG,CAAC,GAAG;AAClH,aAAK,gBAAgB,gDAAgD,KAAK,UAAU,OAAO,SAAS,CAAC,GAAG;AAExG,aAAK,gBAAgB,wDAAwD,OAAO,EAAE,GAAG;AACzF,aAAK,uBAAuB,MAAM;AAElC,YAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACrC,eAAK,MAAM,IAAI,CAAC,SAAS;AACrB,iBAAK,gBAAgB,oCAAoC,IAAI,eAAe,OAAO,EAAE,GAAG;AACxF,iBAAK,SAAS,QAAQ,IAAI;AAAA,UAC9B,CAAC;AAAA,QACL;AAEA,aAAK,gBAAgB,mDAAmD,OAAO,EAAE,GAAG;AACpF,aAAK,oBAAoB,MAAM;AAE/B,mBAAW,MAAM;AACb,eAAK,gBAAgB,uDAAuD,OAAO,EAAE,GAAG;AACxF,eAAK,sBAAsB,MAAM;AAAA,QACrC,GAAG,CAAC;AAEJ,aAAK,gBAAgB,sDAAsD,OAAO,EAAE,GAAG;AACvF,aAAK,qBAAqB,MAAM;AAAA,MACpC,CAAC;AAAA,IACL,OAAO;AACH,YAAM,eAAe;AACrB,WAAK,gBAAgB,YAAY;AACjC,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AAEA,WAAO;AAAA,EACX;AAAA,EAEU,yBAAyB,YAA2B;AAC1D,QAAI,KAAK,mBAAmB;AACxB,WAAK,gBAAgB,kEAAkE;AACvF,YAAM,KAAK,kBAAkB,QAAQ,MAAA;AAAA,IACzC;AAAA,EACJ;AAAA,EAEU,6BAA6B,MAAY;AAC/C,QAAI,KAAK,mBAAmB;AACxB,WAAK,gBAAgB,0EAA0E;AAC/F,WAAK,kBAAkB,kBAAA;AACvB,WAAK,oBAAoB;AAAA,IAC7B;AAAA,EACJ;AACJ;;"}
|
package/dist/node.mjs
CHANGED
|
@@ -24,6 +24,12 @@ class SocketIoServer extends tinyEmitterExports.TinyEmitter {
|
|
|
24
24
|
super();
|
|
25
25
|
this.serverName = serverName;
|
|
26
26
|
}
|
|
27
|
+
SocketDisconnectCallBack = (socket, reason) => {
|
|
28
|
+
};
|
|
29
|
+
SocketDisconnectingCallBack = (socket, reason) => {
|
|
30
|
+
};
|
|
31
|
+
SocketErrorCallBack = (socket, error) => {
|
|
32
|
+
};
|
|
27
33
|
get logPrefix() {
|
|
28
34
|
if (this.namespace) {
|
|
29
35
|
return `SocketIoServer[${this.serverName}:${this.namespace}]: `;
|
|
@@ -277,12 +283,15 @@ class SocketIoServer extends tinyEmitterExports.TinyEmitter {
|
|
|
277
283
|
SetupStandardEvents = (socket) => {
|
|
278
284
|
socket.on("disconnect", (reason) => {
|
|
279
285
|
this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);
|
|
286
|
+
this.SocketDisconnectCallBack(socket, reason);
|
|
280
287
|
});
|
|
281
288
|
socket.on("disconnecting", (reason) => {
|
|
282
289
|
this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);
|
|
290
|
+
this.SocketDisconnectingCallBack(socket, reason);
|
|
283
291
|
});
|
|
284
292
|
socket.on("error", (error) => {
|
|
285
293
|
this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);
|
|
294
|
+
this.SocketErrorCallBack(socket, error);
|
|
286
295
|
});
|
|
287
296
|
socket.on("__STSdisconnect", (reason) => {
|
|
288
297
|
this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);
|
package/dist/node.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.mjs","sources":["../src/socketIoServer.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { ISTSLogger, JSONObject, Sleep } from '@nsshunt/stsutils'\n\nimport { Server, Namespace, Socket, ServerOptions } from \"socket.io\";\n\nimport { STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, STSServerSocket, \n InterServerEvents } from './commonTypes'\n\n//import { createClient, RedisClientType } from 'redis';\nimport { Redis } from 'ioredis';\n\nimport { createAdapter as clusterCreateAdapter } from '@socket.io/cluster-adapter'\nimport { createAdapter } from \"@socket.io/redis-streams-adapter\";\n\nimport { TinyEmitter } from 'tiny-emitter';\n\nexport interface ISocketIoServerOpitons {\n listenPort?: number\n ioRedisMessageProcessorUrl?: string\n wssCustomPath?: string\n serverClusterMode?: boolean\n}\n \nexport abstract class SocketIoServer<ClientToServerEvents extends STSDefaultClientToServerEvents, ServerToClientEvents extends STSDefaultServerToClientEvents> extends TinyEmitter {\n protected namespace?: string\n protected socketionamespace?: Namespace<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, InterServerEvents>\n //protected socketionamespace?: Namespace<ClientToServerEvents, ServerToClientEvents, InterServerEvents>\n protected logger?: ISTSLogger\n protected io?: Server<ClientToServerEvents, ServerToClientEvents>;\n //#redisClient: RedisClientType | Redis | null = null;\n protected redisClient?: Redis;\n protected listenPort?: number;\n protected socketIoCustomPath?: string;\n protected ioRedisMessageProcessorUrl?: string;\n protected serverClusterMode?: boolean;\n protected rooms?: string[];\n protected serverName: string\n protected draining: boolean = false;\n protected attached: boolean = false;\n\n constructor(serverName: string) { // IProcessBase\n super();\n this.serverName = serverName;\n }\n\n protected get logPrefix(): string {\n if (this.namespace) {\n return `SocketIoServer[${this.serverName}:${this.namespace}]: `;\n } else {\n return `SocketIoServer[${this.serverName}:<No Namespace>]: `;\n }\n }\n\n protected LogErrorMessage(message: any) {\n if (this.logger) {\n this.logger.error(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogDebugMessage(message: any) {\n if (this.logger) {\n this.logger.debug(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogInfoMessage(message: any) {\n if (this.logger) {\n this.logger.info(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogWarnMessage(message: any) {\n if (this.logger) {\n this.logger.warn(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogSillyMessage(message: any) {\n if (this.logger) {\n this.logger.silly(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogVerboseMessage(message: any) {\n if (this.logger) {\n this.logger.verbose(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogHttpMessage(message: any) {\n if (this.logger) {\n this.logger.http(`${this.logPrefix}${message}`);\n }\n }\n\n // https://socket.io/docs/v4/middlewares/\n // https://socket.io/docs/v4/server-socket-instance/#sockethandshake\n // https://socket.io/docs/v4/server-socket-instance/#socket-middlewares\n // Use this middleward to check every incomming connection\n protected SetupConnectionMiddleware = () => { };\n\n // Use this middleware to check every packet being received\n protected SetupMessageMiddleware = (socket: STSServerSocket) => { };\n\n protected SocketConnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n protected SocketEventsCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n /*\n protected GetConfig = (socketIoServeroptions: ISocketIoServerOpitons): Partial<ServerOptions> => {\n //this.#redisClient = createClient({url: this.#options.ioRedisMessageProcessorUrl});\n //await this.#redisClient.connect();\n this.LogDebugMessage(`GetConfig() transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (socketIoServeroptions.ioRedisMessageProcessorUrl && socketIoServeroptions.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(socketIoServeroptions.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`GetConfig() createAdapter(redis): redis url: [${socketIoServeroptions.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (socketIoServeroptions.serverClusterMode && socketIoServeroptions.serverClusterMode === true) {\n this.LogDebugMessage(`GetConfig() createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (socketIoServeroptions.wssCustomPath && socketIoServeroptions.wssCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`GetConfig() wssCustomPath: [${socketIoServeroptions.wssCustomPath}]`);\n options.path = socketIoServeroptions.wssCustomPath;\n }\n\n return options;\n }\n */\n\n protected SetEngineEvents = () => {\n if (this.io) {\n this.io.engine.on(\"connection_error\", (err) => {\n this.LogWarnMessage(`SetEngineEvents(): connection_error`); // the request object\n this.LogWarnMessage(err.req); // the request object\n this.LogWarnMessage(err.code); // the error code, for example 1\n this.LogWarnMessage(err.message); // the error message, for example \"Session ID unknown\"\n this.LogWarnMessage(err.context); // some additional error context\n });\n }\n }\n\n WithLogger = (logger: ISTSLogger) => {\n this.logger = logger;\n return this;\n }\n\n WithListenPort = (listenPort: number) => {\n this.listenPort = listenPort;\n return this;\n }\n\n WithSocketIoCustomPath = (socketIoCustomPath: string) => {\n this.socketIoCustomPath = socketIoCustomPath;\n return this;\n }\n\n WithIoRedisMessageProcessorUrl = (ioRedisMessageProcessorUrl: string) => {\n this.ioRedisMessageProcessorUrl = ioRedisMessageProcessorUrl;\n return this;\n }\n\n WithClusterMode = (serverClusterMode: boolean) => {\n this.serverClusterMode = serverClusterMode;\n return this;\n }\n\n WithRooms = (rooms: string[]) => {\n this.rooms = rooms;\n return this;\n }\n\n WithNamespace = (namespace: string) => {\n this.namespace = namespace;\n return this;\n }\n\n AttachSocketIoServer = async (server: Server): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n if (!this.io) {\n this.LogInfoMessage(`AttachServer(): io = server`);\n this.io = server;\n\n this.LogInfoMessage(`AttachServer(): attached = true`);\n this.attached = true;\n\n this.LogInfoMessage(`AttachServer(): SetupNamespace()`);\n this.SetupNamespace();\n } else {\n const errorMessage = (this.attached === true ? `AttachServer(): Server already exists (from AttachServer())` : `AttachServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n StartSocketIoServer = async (): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n //this.#io = require(\"socket.io\")(this.#httpServer, options);\n if (!this.namespace) {\n const errorMessage = `StartServer(): Error: [namespace not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n if (!this.io) {\n if (!this.listenPort) {\n const errorMessage = `StartServer(): Error: [listenPort not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n this.LogDebugMessage(`StartServer(): draining = false`);\n this.draining = false;\n\n this.LogDebugMessage(`StartServer(): transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (this.ioRedisMessageProcessorUrl && this.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(this.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`StartServer(): createAdapter(redis): redis url: [${this.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (this.serverClusterMode && this.serverClusterMode === true) {\n this.LogDebugMessage(`StartServer(): createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (this.socketIoCustomPath && this.socketIoCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`StartServer(): socketIoCustomPath: [${this.socketIoCustomPath}]`);\n options.path = this.socketIoCustomPath;\n }\n\n this.LogDebugMessage(`StartServer(): new Server(): listenPort: [${this.listenPort}]`);\n this.io = new Server(this.listenPort, options);\n\n this.LogDebugMessage(`StartServer(): SetEngineEvents()`);\n this.SetEngineEvents();\n\n this.LogDebugMessage(`StartServer(): Sleeping ...`);\n await Sleep(500);\n this.LogDebugMessage(`StartServer(): Done Sleeping`);\n\n this.LogInfoMessage(`AttachServer(): attached = false`);\n this.attached = false;\n\n this.LogInfoMessage(`StartServer(): SetupNamespace()`);\n this.SetupNamespace();\n\n } else {\n const errorMessage = (this.attached === true ? `StartServer(): Server already exists (from AttachServer())` : `StartServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n DetachSockerIoServer = async (): Promise<void> => {\n if (this.io) {\n if (this.attached === true) {\n this.LogInfoMessage(`DetachServer(): StopNamespace()`);\n await this.StopNamespace();\n this.io = undefined;\n this.LogInfoMessage(`DetachServer(): attached = false`);\n this.attached = false;\n } else {\n const errorMessage = `DetachServer(): Error: [Server has not been attached. Use StopServer() to stop the socker.io server.]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `DetachServer(): Error: [no server exists to DetachServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n StopSocketIoServer = async () => {\n if (this.io) {\n if (this.attached === false) {\n // We are now draining connections\n this.LogInfoMessage(`StopServer(): draining = true`);\n this.draining = true;\n\n this.LogInfoMessage(`StopServer(): StopNamespace()`);\n await this.StopNamespace();\n\n this.LogInfoMessage(`StopServer(): io.of('/').adapter.close()`);\n await this.io.of('/').adapter.close();\n\n if (this.redisClient) {\n this.LogInfoMessage(`StopServer(): redisClient.disconnect()`);\n await this.redisClient.disconnect();\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Sleeping...)`);\n await Sleep(50);\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Done Sleeping)`);\n }\n\n // boot all current connections\n this.LogInfoMessage(`StopServer(): io.disconnectSockets()`);\n this.io.disconnectSockets();\n\n // Stop any future connections, close this server (does not close the underlying http(s) server if io server via that method\n this.LogInfoMessage(`StopServer(): io.close()`);\n this.io.close();\n\n this.LogInfoMessage(`StopServer(): io = undefined`);\n this.io = undefined;\n } else {\n const errorMessage = `StopServer(): Cannot stop an attached server. The server created must handle stop/disconnections. Use StopNamespace() instead.`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `StopServer(): Error: [no server exists to StopServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n LeaveRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`LeaveRoom(): Leaving room [${room}]`);\n socket.leave(room);\n };\n\n JoinRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`JoinRoom(): Socket joining room [${room}], ID: [${socket.id}]`);\n socket.join(room);\n };\n\n protected StopNamespace = async() => {\n this.LogInfoMessage(`StopServer(): CloseNamespaceAdaptors()`);\n await this.CloseNamespaceAdaptors();\n\n this.LogInfoMessage(`StopServer(): DisconnectNamespaceSockets()`);\n this.DisconnectNamespaceSockets();\n }\n\n protected SetupStandardEvents = (socket: STSServerSocket): void => {\n socket.on('disconnect', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on('disconnecting', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on('error', (error: Error) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);\n });\n\n socket.on(\"__STSdisconnect\", (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on(\"__STSdisconnecting\", (reason, callBackResult) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnecting: socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n callBackResult(\"__STSdisconnecting accepted by server.\");\n });\n\n socket.on('__STSjoinRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSjoinRoom: room: [${room}], socket: [${socket.id}]`);\n this.JoinRoom(socket, room)\n });\n });\n\n socket.on('__STSleaveRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSleaveRoom: room: [${room}], socket: [${socket.id}]`);\n this.LeaveRoom(socket, room);\n });\n });\n\n socket.on('__STSsendToRoom', (rooms: string[], payload: { command: string, payload: JSONObject }): void => {\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoom: Sending to room [${room}], ID: [${socket.id}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).emit(payload.command as any, payload);\n }\n });\n });\n\n socket.on('__STSsendToRoomWithCallback', (room: string, timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n cb(errorResponse);\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n cb(dataResponse);\n }\n });\n }\n });\n\n socket.on('__STSsendToRoomsWithCallback', (rooms: string[], timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n const responses: any[] = [ ];\n\n const timeoutForComplete = setTimeout(() => {\n // for this timeout case, sent back the error response and the responses we have received so far ...\n responses.push({\n room: '',\n responses: {\n error: true,\n errorName: 'timeout',\n errorMessage: `__STSsendToRoomsWithCallback timeout: [${timeout}] before all responses received`\n }\n });\n cb(responses);\n }, timeout).unref();\n\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n responses.push({\n room,\n responses: errorResponse\n });\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n responses.push({\n room,\n responses: dataResponse\n });\n }\n if (responses.length === rooms.length) {\n clearTimeout(timeoutForComplete);\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: All complete, Responses Count: [${responses.length}] Invoke call back(responses)`);\n cb(responses);\n }\n });\n }\n });\n });\n }\n\n protected ConnectionDrainingConnectionMiddleware = (): void => {\n if (this.socketionamespace) {\n this.socketionamespace.use((socket, next) => {\n if (this.draining === true) {\n next(new Error(`ConnectionDrainingConnectionMiddleware(): Error: [server connections draining (from a server disconnect)]`));\n } else {\n next();\n }\n });\n }\n }\n \n protected SetupNamespace = (): SocketIoServer<ClientToServerEvents, ServerToClientEvents> => {\n // Create STS Command Centre Client namespace\n if (this.io) {\n this.LogDebugMessage(`SetupNamespace(): socketionamespace = io.of('/${this.namespace}/'`);\n this.socketionamespace = this.io.of(`/${this.namespace}/`);\n\n this.LogDebugMessage(`SetupNamespace(): ConnectionDrainingConnectionMiddleware()`);\n this.ConnectionDrainingConnectionMiddleware();\n\n this.LogDebugMessage(`SetupNamespace(): SetupConnectionMiddleware()`);\n this.SetupConnectionMiddleware();\n\n this.socketionamespace.on(\"connection\", socket => {\n this.LogDebugMessage(`SetupNamespace(): Socket connected, ID: [${socket.id}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (auth): [${JSON.stringify(socket.handshake.auth)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (host): [${JSON.stringify(socket.handshake.headers.host)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (url): [${JSON.stringify(socket.handshake.url)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake: [${JSON.stringify(socket.handshake)}]`);\n\n this.LogDebugMessage(`SetupNamespace(): SetupMessageMiddleware(): Socket: [${socket.id}]`);\n this.SetupMessageMiddleware(socket);\n\n if (this.rooms && this.rooms.length > 0) {\n this.rooms.map((room) => {\n this.LogDebugMessage(`SetupNamespace(): Joining Room: [${room}], Socket: [${socket.id}]`);\n this.JoinRoom(socket, room);\n });\n }\n\n this.LogDebugMessage(`SetupNamespace(): SetupStandardEvents: Socket: [${socket.id}]`);\n this.SetupStandardEvents(socket);\n\n setTimeout(() => {\n this.LogDebugMessage(`SetupNamespace(): SocketConnectCallBack(): Socket: [${socket.id}]`);\n this.SocketConnectCallBack(socket);\n }, 0);\n\n this.LogDebugMessage(`SetupNamespace(): SocketEventsCallBack(): Socket: [${socket.id}]`);\n this.SocketEventsCallBack(socket);\n });\n } else {\n const errorMessage = `SetupNamespace(): Error: [No server attached]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n return this;\n }\n\n protected CloseNamespaceAdaptors = async (): Promise<void> => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`CloseNamespaceAdaptors(): this.socketionamespace.adapter.close()`);\n await this.socketionamespace.adapter.close();\n }\n }\n\n protected DisconnectNamespaceSockets = (): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`DisconnectNamespaceSockets(): this.socketionamespace.disconnectSockets()`);\n this.socketionamespace.disconnectSockets();\n this.socketionamespace = undefined;\n }\n }\n}\n"],"names":["TinyEmitter","clusterCreateAdapter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node.mjs","sources":["../src/socketIoServer.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { ISTSLogger, JSONObject, Sleep } from '@nsshunt/stsutils'\n\nimport { Server, Namespace, Socket, ServerOptions } from \"socket.io\";\n\nimport { STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, STSServerSocket, \n InterServerEvents } from './commonTypes'\n\n//import { createClient, RedisClientType } from 'redis';\nimport { Redis } from 'ioredis';\n\nimport { createAdapter as clusterCreateAdapter } from '@socket.io/cluster-adapter'\nimport { createAdapter } from \"@socket.io/redis-streams-adapter\";\n\nimport { TinyEmitter } from 'tiny-emitter';\n\nexport interface ISocketIoServerOpitons {\n listenPort?: number\n ioRedisMessageProcessorUrl?: string\n wssCustomPath?: string\n serverClusterMode?: boolean\n}\n \nexport abstract class SocketIoServer<ClientToServerEvents extends STSDefaultClientToServerEvents, ServerToClientEvents extends STSDefaultServerToClientEvents> extends TinyEmitter {\n protected namespace?: string\n protected socketionamespace?: Namespace<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, InterServerEvents>\n //protected socketionamespace?: Namespace<ClientToServerEvents, ServerToClientEvents, InterServerEvents>\n protected logger?: ISTSLogger\n protected io?: Server<ClientToServerEvents, ServerToClientEvents>;\n //#redisClient: RedisClientType | Redis | null = null;\n protected redisClient?: Redis;\n protected listenPort?: number;\n protected socketIoCustomPath?: string;\n protected ioRedisMessageProcessorUrl?: string;\n protected serverClusterMode?: boolean;\n protected rooms?: string[];\n protected serverName: string\n protected draining: boolean = false;\n protected attached: boolean = false;\n\n constructor(serverName: string) { // IProcessBase\n super();\n this.serverName = serverName;\n }\n\n protected SocketDisconnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string): void => { };\n\n protected SocketDisconnectingCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string): void => { };\n\n protected SocketErrorCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>, error: Error): void => { };\n\n protected get logPrefix(): string {\n if (this.namespace) {\n return `SocketIoServer[${this.serverName}:${this.namespace}]: `;\n } else {\n return `SocketIoServer[${this.serverName}:<No Namespace>]: `;\n }\n }\n\n protected LogErrorMessage(message: any) {\n if (this.logger) {\n this.logger.error(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogDebugMessage(message: any) {\n if (this.logger) {\n this.logger.debug(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogInfoMessage(message: any) {\n if (this.logger) {\n this.logger.info(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogWarnMessage(message: any) {\n if (this.logger) {\n this.logger.warn(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogSillyMessage(message: any) {\n if (this.logger) {\n this.logger.silly(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogVerboseMessage(message: any) {\n if (this.logger) {\n this.logger.verbose(`${this.logPrefix}${message}`);\n }\n }\n\n protected LogHttpMessage(message: any) {\n if (this.logger) {\n this.logger.http(`${this.logPrefix}${message}`);\n }\n }\n\n // https://socket.io/docs/v4/middlewares/\n // https://socket.io/docs/v4/server-socket-instance/#sockethandshake\n // https://socket.io/docs/v4/server-socket-instance/#socket-middlewares\n // Use this middleward to check every incomming connection\n protected SetupConnectionMiddleware = () => { };\n\n // Use this middleware to check every packet being received\n protected SetupMessageMiddleware = (socket: STSServerSocket) => { };\n\n protected SocketConnectCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n protected SocketEventsCallBack = (socket: Socket<ClientToServerEvents, ServerToClientEvents>): void => { };\n\n /*\n protected GetConfig = (socketIoServeroptions: ISocketIoServerOpitons): Partial<ServerOptions> => {\n //this.#redisClient = createClient({url: this.#options.ioRedisMessageProcessorUrl});\n //await this.#redisClient.connect();\n this.LogDebugMessage(`GetConfig() transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (socketIoServeroptions.ioRedisMessageProcessorUrl && socketIoServeroptions.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(socketIoServeroptions.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`GetConfig() createAdapter(redis): redis url: [${socketIoServeroptions.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (socketIoServeroptions.serverClusterMode && socketIoServeroptions.serverClusterMode === true) {\n this.LogDebugMessage(`GetConfig() createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (socketIoServeroptions.wssCustomPath && socketIoServeroptions.wssCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`GetConfig() wssCustomPath: [${socketIoServeroptions.wssCustomPath}]`);\n options.path = socketIoServeroptions.wssCustomPath;\n }\n\n return options;\n }\n */\n\n protected SetEngineEvents = () => {\n if (this.io) {\n this.io.engine.on(\"connection_error\", (err) => {\n this.LogWarnMessage(`SetEngineEvents(): connection_error`); // the request object\n this.LogWarnMessage(err.req); // the request object\n this.LogWarnMessage(err.code); // the error code, for example 1\n this.LogWarnMessage(err.message); // the error message, for example \"Session ID unknown\"\n this.LogWarnMessage(err.context); // some additional error context\n });\n }\n }\n\n WithLogger = (logger: ISTSLogger) => {\n this.logger = logger;\n return this;\n }\n\n WithListenPort = (listenPort: number) => {\n this.listenPort = listenPort;\n return this;\n }\n\n WithSocketIoCustomPath = (socketIoCustomPath: string) => {\n this.socketIoCustomPath = socketIoCustomPath;\n return this;\n }\n\n WithIoRedisMessageProcessorUrl = (ioRedisMessageProcessorUrl: string) => {\n this.ioRedisMessageProcessorUrl = ioRedisMessageProcessorUrl;\n return this;\n }\n\n WithClusterMode = (serverClusterMode: boolean) => {\n this.serverClusterMode = serverClusterMode;\n return this;\n }\n\n WithRooms = (rooms: string[]) => {\n this.rooms = rooms;\n return this;\n }\n\n WithNamespace = (namespace: string) => {\n this.namespace = namespace;\n return this;\n }\n\n AttachSocketIoServer = async (server: Server): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n if (!this.io) {\n this.LogInfoMessage(`AttachServer(): io = server`);\n this.io = server;\n\n this.LogInfoMessage(`AttachServer(): attached = true`);\n this.attached = true;\n\n this.LogInfoMessage(`AttachServer(): SetupNamespace()`);\n this.SetupNamespace();\n } else {\n const errorMessage = (this.attached === true ? `AttachServer(): Server already exists (from AttachServer())` : `AttachServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n StartSocketIoServer = async (): Promise<SocketIoServer<ClientToServerEvents, ServerToClientEvents>> => {\n //this.#io = require(\"socket.io\")(this.#httpServer, options);\n if (!this.namespace) {\n const errorMessage = `StartServer(): Error: [namespace not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n if (!this.io) {\n if (!this.listenPort) {\n const errorMessage = `StartServer(): Error: [listenPort not specified]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n this.LogDebugMessage(`StartServer(): draining = false`);\n this.draining = false;\n\n this.LogDebugMessage(`StartServer(): transports: [ [websocket] ]`);\n const options: Partial<ServerOptions> = {\n transports: [ \"websocket\" ], // or [ \"websocket\", \"polling\" ] (to use long-poolling. Note that the order matters)\n }\n\n if (this.ioRedisMessageProcessorUrl && this.ioRedisMessageProcessorUrl !== '') {\n this.redisClient = new Redis(this.ioRedisMessageProcessorUrl);\n this.LogDebugMessage(`StartServer(): createAdapter(redis): redis url: [${this.ioRedisMessageProcessorUrl}]`);\n options.adapter = createAdapter(this.redisClient) as any;\n } else if (this.serverClusterMode && this.serverClusterMode === true) {\n this.LogDebugMessage(`StartServer(): createAdapter(cluster)`);\n options.adapter = clusterCreateAdapter() as any;\n }\n\n if (this.socketIoCustomPath && this.socketIoCustomPath.localeCompare('') !== 0) {\n this.LogDebugMessage(`StartServer(): socketIoCustomPath: [${this.socketIoCustomPath}]`);\n options.path = this.socketIoCustomPath;\n }\n\n this.LogDebugMessage(`StartServer(): new Server(): listenPort: [${this.listenPort}]`);\n this.io = new Server(this.listenPort, options);\n\n this.LogDebugMessage(`StartServer(): SetEngineEvents()`);\n this.SetEngineEvents();\n\n this.LogDebugMessage(`StartServer(): Sleeping ...`);\n await Sleep(500);\n this.LogDebugMessage(`StartServer(): Done Sleeping`);\n\n this.LogInfoMessage(`AttachServer(): attached = false`);\n this.attached = false;\n\n this.LogInfoMessage(`StartServer(): SetupNamespace()`);\n this.SetupNamespace();\n\n } else {\n const errorMessage = (this.attached === true ? `StartServer(): Server already exists (from AttachServer())` : `StartServer(): Server already exists (from StartServer())`);\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n return this;\n }\n\n DetachSockerIoServer = async (): Promise<void> => {\n if (this.io) {\n if (this.attached === true) {\n this.LogInfoMessage(`DetachServer(): StopNamespace()`);\n await this.StopNamespace();\n this.io = undefined;\n this.LogInfoMessage(`DetachServer(): attached = false`);\n this.attached = false;\n } else {\n const errorMessage = `DetachServer(): Error: [Server has not been attached. Use StopServer() to stop the socker.io server.]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `DetachServer(): Error: [no server exists to DetachServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n StopSocketIoServer = async () => {\n if (this.io) {\n if (this.attached === false) {\n // We are now draining connections\n this.LogInfoMessage(`StopServer(): draining = true`);\n this.draining = true;\n\n this.LogInfoMessage(`StopServer(): StopNamespace()`);\n await this.StopNamespace();\n\n this.LogInfoMessage(`StopServer(): io.of('/').adapter.close()`);\n await this.io.of('/').adapter.close();\n\n if (this.redisClient) {\n this.LogInfoMessage(`StopServer(): redisClient.disconnect()`);\n await this.redisClient.disconnect();\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Sleeping...)`);\n await Sleep(50);\n this.LogInfoMessage(`StopServer(): redisClient.disconnect() (Done Sleeping)`);\n }\n\n // boot all current connections\n this.LogInfoMessage(`StopServer(): io.disconnectSockets()`);\n this.io.disconnectSockets();\n\n // Stop any future connections, close this server (does not close the underlying http(s) server if io server via that method\n this.LogInfoMessage(`StopServer(): io.close()`);\n this.io.close();\n\n this.LogInfoMessage(`StopServer(): io = undefined`);\n this.io = undefined;\n } else {\n const errorMessage = `StopServer(): Cannot stop an attached server. The server created must handle stop/disconnections. Use StopNamespace() instead.`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n } else {\n const errorMessage = `StopServer(): Error: [no server exists to StopServer()]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n LeaveRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`LeaveRoom(): Leaving room [${room}]`);\n socket.leave(room);\n };\n\n JoinRoom = (socket: STSServerSocket, room: string): void => {\n this.LogDebugMessage(`JoinRoom(): Socket joining room [${room}], ID: [${socket.id}]`);\n socket.join(room);\n };\n\n protected StopNamespace = async() => {\n this.LogInfoMessage(`StopServer(): CloseNamespaceAdaptors()`);\n await this.CloseNamespaceAdaptors();\n\n this.LogInfoMessage(`StopServer(): DisconnectNamespaceSockets()`);\n this.DisconnectNamespaceSockets();\n }\n\n protected SetupStandardEvents = (socket: STSServerSocket): void => {\n socket.on('disconnect', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n this.SocketDisconnectCallBack(socket, reason);\n });\n\n socket.on('disconnecting', (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n this.SocketDisconnectingCallBack(socket, reason);\n });\n\n socket.on('error', (error: Error) => {\n this.LogDebugMessage(`SetupStandardEvents(): socket error, ID: [${socket.id}], Error: [${error}]`);\n this.SocketErrorCallBack(socket, error);\n });\n\n socket.on(\"__STSdisconnect\", (reason: string) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnect: socket disconnect, ID: [${socket.id}], reason: [${reason}]`);\n });\n\n socket.on(\"__STSdisconnecting\", (reason, callBackResult) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSdisconnecting: socket disconnecting, ID: [${socket.id}], reason: [${reason}]`);\n callBackResult(\"__STSdisconnecting accepted by server.\");\n });\n\n socket.on('__STSjoinRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSjoinRoom: room: [${room}], socket: [${socket.id}]`);\n this.JoinRoom(socket, room)\n });\n });\n\n socket.on('__STSleaveRoom', (rooms: string[]): void => { //@@ names\n rooms.forEach((room) => {\n this.LogDebugMessage(`SetupStandardEvents(): __STSleaveRoom: room: [${room}], socket: [${socket.id}]`);\n this.LeaveRoom(socket, room);\n });\n });\n\n socket.on('__STSsendToRoom', (rooms: string[], payload: { command: string, payload: JSONObject }): void => {\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoom: Sending to room [${room}], ID: [${socket.id}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).emit(payload.command as any, payload);\n }\n });\n });\n\n socket.on('__STSsendToRoomWithCallback', (room: string, timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n cb(errorResponse);\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n cb(dataResponse);\n }\n });\n }\n });\n\n socket.on('__STSsendToRoomsWithCallback', (rooms: string[], timeout: number, payload: { command: string, payload: JSONObject }, cb: (data: JSONObject) => void): void => {\n const responses: any[] = [ ];\n\n const timeoutForComplete = setTimeout(() => {\n // for this timeout case, sent back the error response and the responses we have received so far ...\n responses.push({\n room: '',\n responses: {\n error: true,\n errorName: 'timeout',\n errorMessage: `__STSsendToRoomsWithCallback timeout: [${timeout}] before all responses received`\n }\n });\n cb(responses);\n }, timeout).unref();\n\n rooms.forEach((room) => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: Sending to room [${room}], ID: [${socket.id}], timeout: [${timeout}], Command: [${payload.command}]`);\n this.socketionamespace.to(room).timeout(timeout).emit(payload.command as any, payload, (err: Error, dataResponse: JSONObject[]) => {\n if (err) {\n console.error(err);\n const errorResponse = {\n error: true, \n errorName: err.name, \n errorMessage: err.message,\n //errorCause: err.cause,\n //errorStack: err.stack\n };\n this.LogErrorMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`)\n responses.push({\n room,\n responses: errorResponse\n });\n } else {\n this.LogDebugMessage(`SetupStandardEvents(): __STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`)\n responses.push({\n room,\n responses: dataResponse\n });\n }\n if (responses.length === rooms.length) {\n clearTimeout(timeoutForComplete);\n this.LogDebugMessage(`SetupStandardEvents(): socket.on: __STSsendToRoomsWithCallback: All complete, Responses Count: [${responses.length}] Invoke call back(responses)`);\n cb(responses);\n }\n });\n }\n });\n });\n }\n\n protected ConnectionDrainingConnectionMiddleware = (): void => {\n if (this.socketionamespace) {\n this.socketionamespace.use((socket, next) => {\n if (this.draining === true) {\n next(new Error(`ConnectionDrainingConnectionMiddleware(): Error: [server connections draining (from a server disconnect)]`));\n } else {\n next();\n }\n });\n }\n }\n \n protected SetupNamespace = (): SocketIoServer<ClientToServerEvents, ServerToClientEvents> => {\n // Create STS Command Centre Client namespace\n if (this.io) {\n this.LogDebugMessage(`SetupNamespace(): socketionamespace = io.of('/${this.namespace}/'`);\n this.socketionamespace = this.io.of(`/${this.namespace}/`);\n\n this.LogDebugMessage(`SetupNamespace(): ConnectionDrainingConnectionMiddleware()`);\n this.ConnectionDrainingConnectionMiddleware();\n\n this.LogDebugMessage(`SetupNamespace(): SetupConnectionMiddleware()`);\n this.SetupConnectionMiddleware();\n\n this.socketionamespace.on(\"connection\", socket => {\n this.LogDebugMessage(`SetupNamespace(): Socket connected, ID: [${socket.id}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (auth): [${JSON.stringify(socket.handshake.auth)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (host): [${JSON.stringify(socket.handshake.headers.host)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake (url): [${JSON.stringify(socket.handshake.url)}]`);\n this.LogDebugMessage(`SetupNamespace(): Authentication Handshake: [${JSON.stringify(socket.handshake)}]`);\n\n this.LogDebugMessage(`SetupNamespace(): SetupMessageMiddleware(): Socket: [${socket.id}]`);\n this.SetupMessageMiddleware(socket);\n\n if (this.rooms && this.rooms.length > 0) {\n this.rooms.map((room) => {\n this.LogDebugMessage(`SetupNamespace(): Joining Room: [${room}], Socket: [${socket.id}]`);\n this.JoinRoom(socket, room);\n });\n }\n\n this.LogDebugMessage(`SetupNamespace(): SetupStandardEvents: Socket: [${socket.id}]`);\n this.SetupStandardEvents(socket);\n\n setTimeout(() => {\n this.LogDebugMessage(`SetupNamespace(): SocketConnectCallBack(): Socket: [${socket.id}]`);\n this.SocketConnectCallBack(socket);\n }, 0);\n\n this.LogDebugMessage(`SetupNamespace(): SocketEventsCallBack(): Socket: [${socket.id}]`);\n this.SocketEventsCallBack(socket);\n });\n } else {\n const errorMessage = `SetupNamespace(): Error: [No server attached]`;\n this.LogErrorMessage(errorMessage);\n throw new Error(errorMessage);\n }\n\n return this;\n }\n\n protected CloseNamespaceAdaptors = async (): Promise<void> => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`CloseNamespaceAdaptors(): this.socketionamespace.adapter.close()`);\n await this.socketionamespace.adapter.close();\n }\n }\n\n protected DisconnectNamespaceSockets = (): void => {\n if (this.socketionamespace) {\n this.LogDebugMessage(`DisconnectNamespaceSockets(): this.socketionamespace.disconnectSockets()`);\n this.socketionamespace.disconnectSockets();\n this.socketionamespace = undefined;\n }\n }\n}\n"],"names":["TinyEmitter","clusterCreateAdapter"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -24,6 +24,9 @@ export declare abstract class SocketIoServer<ClientToServerEvents extends STSDef
|
|
|
24
24
|
protected draining: boolean;
|
|
25
25
|
protected attached: boolean;
|
|
26
26
|
constructor(serverName: string);
|
|
27
|
+
protected SocketDisconnectCallBack: (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string) => void;
|
|
28
|
+
protected SocketDisconnectingCallBack: (socket: Socket<ClientToServerEvents, ServerToClientEvents>, reason: string) => void;
|
|
29
|
+
protected SocketErrorCallBack: (socket: Socket<ClientToServerEvents, ServerToClientEvents>, error: Error) => void;
|
|
27
30
|
protected get logPrefix(): string;
|
|
28
31
|
protected LogErrorMessage(message: any): void;
|
|
29
32
|
protected LogDebugMessage(message: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketIoServer.d.ts","sourceRoot":"","sources":["../src/socketIoServer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"socketIoServer.d.ts","sourceRoot":"","sources":["../src/socketIoServer.ts"],"names":[],"mappings":"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"}
|