From 61de0b2a2c2577e211726494d37399b5397c98b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Fri, 31 Mar 2023 23:16:02 +0200 Subject: [PATCH] Fix some issues with websockets and encoding --- src/Center/CenterSessionManager.ts | 2 +- src/Client/ClientSessionManager.ts | 2 +- src/Job/Job.ts | 6 ++++-- src/SmppSession.ts | 10 +++++----- src/WS/ClientSet.ts | 13 ++++++++----- src/WS/WSServer.ts | 1 + 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Center/CenterSessionManager.ts b/src/Center/CenterSessionManager.ts index 2864114..f95118f 100644 --- a/src/Center/CenterSessionManager.ts +++ b/src/Center/CenterSessionManager.ts @@ -10,7 +10,7 @@ export class CenterSessionManager extends SessionManager { ManagedSessionClass: typeof Center = Center; sessionId: number = 0; sessions: Center[] = []; - identifier: string = "center"; + identifier: string = "Client"; readonly logger: Logger = new Logger("CenterSessionManager"); constructor() { diff --git a/src/Client/ClientSessionManager.ts b/src/Client/ClientSessionManager.ts index 73fa05c..eb4c6bc 100644 --- a/src/Client/ClientSessionManager.ts +++ b/src/Client/ClientSessionManager.ts @@ -10,7 +10,7 @@ export default class ClientSessionManager extends SessionManager { ManagedSessionClass: typeof Client = Client; sessionId: number = 0; sessions: Client[] = []; - identifier: string = "client"; + identifier: string = "Client"; readonly logger: Logger = new Logger("ClientSessionManager"); constructor() { diff --git a/src/Job/Job.ts b/src/Job/Job.ts index 7d997b2..8721468 100644 --- a/src/Job/Job.ts +++ b/src/Job/Job.ts @@ -2,15 +2,17 @@ import EventEmitter from "events"; import {PDU, SerializedJob} from "../CommonObjects"; const smpp = require("smpp"); - +// TODO: Use pdu.data_coding for data coding +// See available schemes here https://messaggio.com/industry-specifications-and-standards/smpp-data-coding-scheme/ export class Job { static readonly STATE_CHANGED: string = "STATE_CHANGED"; private eventEmitter: EventEmitter = new EventEmitter(); constructor(pdu: PDU, perSecond?: number, count?: number) { if (pdu.short_message && pdu.short_message.type === "Buffer") { - pdu.short_message = String(pdu.short_message.data); + pdu.short_message = Buffer.from(pdu.short_message.data, 'ascii').toString(); } + pdu.short_message = 'test123'; this._pdu = pdu; this._perSecond = perSecond; this._count = count; diff --git a/src/SmppSession.ts b/src/SmppSession.ts index 2a4e4eb..58526b2 100644 --- a/src/SmppSession.ts +++ b/src/SmppSession.ts @@ -131,22 +131,22 @@ export abstract class SmppSession { this.logger.log1(`Update WS: ${event}`); let message: { type: string, - data?: string + data?: any } = { type: event, }; switch (event) { case this.EVENT.STATE_CHANGED: - message.data = JSON.stringify(this.serialize()); + message.data = this.serialize(); break; case this.EVENT.STATUS_CHANGED: - message.data = JSON.stringify(this.status); + message.data = this.status; break; case this.EVENT.ANY_PDU: - message.data = JSON.stringify(args![0]); + message.data = args![0]; break; case this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT: - message.data = JSON.stringify(args![0]); + message.data = args![0]; break; } this.eventEmitter.emit(this.UPDATE_WS, message); diff --git a/src/WS/ClientSet.ts b/src/WS/ClientSet.ts index 34cf925..09099f1 100644 --- a/src/WS/ClientSet.ts +++ b/src/WS/ClientSet.ts @@ -19,6 +19,7 @@ export class ClientSet { this.sessionId = parseInt(data[1]); this.logger = new Logger(`ClientSet-${this.type}-${this.sessionId}`); + this.logger.log1(`Created client set for ${this.type} ${this.sessionId}`); this.relevantSessionManager = sessionManagers.find(sm => sm.identifier === this.type); if (!this.relevantSessionManager) { @@ -45,7 +46,7 @@ export class ClientSet { add(ws: any): void { this.logger.log2(`Added client`); this.clients.push(ws); - ws.on('close', this.eventOnClose.bind(this)); + ws.on('close', this.eventOnClose.bind(this, ws)); } eventOnClose(ws: any): void { @@ -54,10 +55,12 @@ export class ClientSet { } notifyClients(message: string) { - this.logger.log2(`Notifying clients: ${message}`); - this.clients.forEach((ws) => { - ws.send(message); - }); + if (this.clients.length > 0) { + this.logger.log2(`Notifying clients: ${message}`); + this.clients.forEach((ws) => { + ws.send(message); + }); + } } private attachListener(session: SmppSession) { diff --git a/src/WS/WSServer.ts b/src/WS/WSServer.ts index cab364c..b6c4082 100644 --- a/src/WS/WSServer.ts +++ b/src/WS/WSServer.ts @@ -39,6 +39,7 @@ export class WSServer { let clientSet: ClientSet | undefined = this.clients.find((clientSet: ClientSet) => clientSet.identifier === message); if (!clientSet) { clientSet = new ClientSet(message, this.sessionManagers); + this.clients.push(clientSet); } clientSet.add(ws); }