Fix some issues with websockets and encoding

This commit is contained in:
David Majdandžić
2023-03-31 23:16:02 +02:00
parent a5ecf37752
commit 61de0b2a2c
6 changed files with 20 additions and 14 deletions

View File

@@ -10,7 +10,7 @@ export class CenterSessionManager extends SessionManager {
ManagedSessionClass: typeof Center = Center; ManagedSessionClass: typeof Center = Center;
sessionId: number = 0; sessionId: number = 0;
sessions: Center[] = []; sessions: Center[] = [];
identifier: string = "center"; identifier: string = "Client";
readonly logger: Logger = new Logger("CenterSessionManager"); readonly logger: Logger = new Logger("CenterSessionManager");
constructor() { constructor() {

View File

@@ -10,7 +10,7 @@ export default class ClientSessionManager extends SessionManager {
ManagedSessionClass: typeof Client = Client; ManagedSessionClass: typeof Client = Client;
sessionId: number = 0; sessionId: number = 0;
sessions: Client[] = []; sessions: Client[] = [];
identifier: string = "client"; identifier: string = "Client";
readonly logger: Logger = new Logger("ClientSessionManager"); readonly logger: Logger = new Logger("ClientSessionManager");
constructor() { constructor() {

View File

@@ -2,15 +2,17 @@ import EventEmitter from "events";
import {PDU, SerializedJob} from "../CommonObjects"; import {PDU, SerializedJob} from "../CommonObjects";
const smpp = require("smpp"); 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 { export class Job {
static readonly STATE_CHANGED: string = "STATE_CHANGED"; static readonly STATE_CHANGED: string = "STATE_CHANGED";
private eventEmitter: EventEmitter = new EventEmitter(); private eventEmitter: EventEmitter = new EventEmitter();
constructor(pdu: PDU, perSecond?: number, count?: number) { constructor(pdu: PDU, perSecond?: number, count?: number) {
if (pdu.short_message && pdu.short_message.type === "Buffer") { 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._pdu = pdu;
this._perSecond = perSecond; this._perSecond = perSecond;
this._count = count; this._count = count;

View File

@@ -131,22 +131,22 @@ export abstract class SmppSession {
this.logger.log1(`Update WS: ${event}`); this.logger.log1(`Update WS: ${event}`);
let message: { let message: {
type: string, type: string,
data?: string data?: any
} = { } = {
type: event, type: event,
}; };
switch (event) { switch (event) {
case this.EVENT.STATE_CHANGED: case this.EVENT.STATE_CHANGED:
message.data = JSON.stringify(this.serialize()); message.data = this.serialize();
break; break;
case this.EVENT.STATUS_CHANGED: case this.EVENT.STATUS_CHANGED:
message.data = JSON.stringify(this.status); message.data = this.status;
break; break;
case this.EVENT.ANY_PDU: case this.EVENT.ANY_PDU:
message.data = JSON.stringify(args![0]); message.data = args![0];
break; break;
case this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT: case this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT:
message.data = JSON.stringify(args![0]); message.data = args![0];
break; break;
} }
this.eventEmitter.emit(this.UPDATE_WS, message); this.eventEmitter.emit(this.UPDATE_WS, message);

View File

@@ -19,6 +19,7 @@ export class ClientSet {
this.sessionId = parseInt(data[1]); this.sessionId = parseInt(data[1]);
this.logger = new Logger(`ClientSet-${this.type}-${this.sessionId}`); 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); this.relevantSessionManager = sessionManagers.find(sm => sm.identifier === this.type);
if (!this.relevantSessionManager) { if (!this.relevantSessionManager) {
@@ -45,7 +46,7 @@ export class ClientSet {
add(ws: any): void { add(ws: any): void {
this.logger.log2(`Added client`); this.logger.log2(`Added client`);
this.clients.push(ws); this.clients.push(ws);
ws.on('close', this.eventOnClose.bind(this)); ws.on('close', this.eventOnClose.bind(this, ws));
} }
eventOnClose(ws: any): void { eventOnClose(ws: any): void {
@@ -54,10 +55,12 @@ export class ClientSet {
} }
notifyClients(message: string) { notifyClients(message: string) {
this.logger.log2(`Notifying clients: ${message}`); if (this.clients.length > 0) {
this.clients.forEach((ws) => { this.logger.log2(`Notifying clients: ${message}`);
ws.send(message); this.clients.forEach((ws) => {
}); ws.send(message);
});
}
} }
private attachListener(session: SmppSession) { private attachListener(session: SmppSession) {

View File

@@ -39,6 +39,7 @@ export class WSServer {
let clientSet: ClientSet | undefined = this.clients.find((clientSet: ClientSet) => clientSet.identifier === message); let clientSet: ClientSet | undefined = this.clients.find((clientSet: ClientSet) => clientSet.identifier === message);
if (!clientSet) { if (!clientSet) {
clientSet = new ClientSet(message, this.sessionManagers); clientSet = new ClientSet(message, this.sessionManagers);
this.clients.push(clientSet);
} }
clientSet.add(ws); clientSet.add(ws);
} }