More refactoring

This commit is contained in:
David Majdandžić
2023-03-28 04:28:08 +02:00
parent 75392079f7
commit c917bf6cc8
7 changed files with 97 additions and 50 deletions

View File

@@ -1,5 +1,6 @@
import EventEmitter from "events";
import {Job} from "../Job";
import {Job} from "../Job/Job";
import {JobEvents} from "../Job/JobEvents";
import Logger from "../Logger";
import PersistentPromise from "../PersistentPromise";
import {SmppSession} from "../SmppSession";
@@ -9,12 +10,12 @@ import ClientStatus from "./ClientStatus";
const NanoTimer = require('nanotimer');
const smpp = require("smpp");
const AUTO_ENQUIRE_LINK_PERIOD: number = Number(process.env.AUTO_ENQUIRE_LINK_PERIOD) || 500;
const AUTO_ENQUIRE_LINK_PERIOD: number = Number(process.env.AUTO_ENQUIRE_LINK_PERIOD) || 30000;
const MESSAGE_SEND_UPDATE_DELAY: number = Number(process.env.MESSAGE_SEND_UPDATE_DELAY) || 500;
export class Client implements SmppSession {
defaultSingleJob: Job = Job.createEmptySingle();
defaultMultipleJob: Job = Job.createEmptyMultiple();
defaultSingleJob!: Job;
defaultMultipleJob!: Job;
private readonly eventEmitter: EventEmitter;
private readonly logger: Logger;
private readonly _id: number;
@@ -51,10 +52,6 @@ const MESSAGE_SEND_UPDATE_DELAY: number = Number(process.env.MESSAGE_SEND_UPDATE
private _url: string;
getUrl(): string {
return this._url;
}
set url(value: string) {
this._url = value;
}
@@ -67,14 +64,20 @@ const MESSAGE_SEND_UPDATE_DELAY: number = Number(process.env.MESSAGE_SEND_UPDATE
this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize());
}
getUrl(): string {
return this._url;
}
setDefaultSingleJob(job: Job): void {
this.defaultSingleJob = job;
this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize());
job.on(JobEvents.STATE_CHANGED, () => this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize()));
}
setDefaultMultipleJob(job: Job): void {
this.defaultMultipleJob = job;
this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize());
job.on(JobEvents.STATE_CHANGED, () => this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize()));
}
getDefaultSingleJob(): Job {
@@ -91,7 +94,10 @@ const MESSAGE_SEND_UPDATE_DELAY: number = Number(process.env.MESSAGE_SEND_UPDATE
}
initialize(): void {
return;
this.defaultSingleJob = Job.createEmptySingle();
this.defaultMultipleJob = Job.createEmptyMultiple();
this.defaultSingleJob.on(JobEvents.STATE_CHANGED, () => this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize()));
this.defaultMultipleJob.on(JobEvents.STATE_CHANGED, () => this.eventEmitter.emit(ClientEvents.STATE_CHANGED, this.serialize()));
}
connect(): PersistentPromise {

View File

@@ -1,6 +1,6 @@
import fs from "fs";
import {Client} from "./Client";
import {Job} from "../Job";
import {Job} from "../Job/Job";
import Logger from "../Logger";
import SessionManager from "../SessionManager";
import {SmppSession} from "../SmppSession";

View File

@@ -1,34 +0,0 @@
const smpp = require("smpp");
// TODO: Implement on change event and propagate it to sessions
export class Job {
pdu: any;
perSecond?: number;
count?: number;
constructor(pdu: any, perSecond?: number, count?: number) {
this.pdu = pdu;
this.perSecond = perSecond;
this.count = count;
}
serialize(): string {
return JSON.stringify(this);
}
static deserialize(serialized: any): Job {
if (!serialized.pdu.command) {
throw new Error("Invalid serialized job");
}
let pdu: any = new smpp.PDU(serialized.pdu.command, serialized.pdu);
return new Job(pdu, serialized.perSecond, serialized.count);
}
static createEmptySingle(): Job {
return new Job({});
}
static createEmptyMultiple(): Job {
return new Job({}, 1, 1);
}
}

71
src/Job/Job.ts Normal file
View File

@@ -0,0 +1,71 @@
import EventEmitter from "events";
import {JobEvents} from "./JobEvents";
const smpp = require("smpp");
export class Job {
private eventEmitter: EventEmitter = new EventEmitter();
constructor(pdu: any, perSecond?: number, count?: number) {
this._pdu = pdu;
this._perSecond = perSecond;
this._count = count;
}
private _pdu: any;
get pdu(): any {
return this._pdu;
}
set pdu(value: any) {
this._pdu = value;
this.eventEmitter.emit(JobEvents.STATE_CHANGED, {});
}
private _perSecond?: number;
get perSecond(): number {
return <number>this._perSecond;
}
set perSecond(value: number) {
this._perSecond = value;
this.eventEmitter.emit(JobEvents.STATE_CHANGED, {});
}
private _count?: number;
get count(): number {
return <number>this._count;
}
set count(value: number) {
this._count = value;
this.eventEmitter.emit(JobEvents.STATE_CHANGED, {});
}
static deserialize(serialized: any): Job {
if (!serialized._pdu) {
return Job.createEmptyMultiple();
}
let pdu: any = new smpp.PDU(serialized._pdu.command, serialized._pdu);
return new Job(pdu, serialized._perSecond, serialized._count);
}
static createEmptySingle(): Job {
return new Job({});
}
static createEmptyMultiple(): Job {
return new Job({}, 1, 1);
}
serialize(): string {
return JSON.stringify(this);
}
on(event: string, callback: (...args: any[]) => void): void {
this.eventEmitter.on(event, callback);
}
}

3
src/Job/JobEvents.ts Normal file
View File

@@ -0,0 +1,3 @@
export class JobEvents {
static readonly STATE_CHANGED: string = "STATE_CHANGED";
}

View File

@@ -1,4 +1,4 @@
import {Job} from "./Job";
import {Job} from "./Job/Job";
// TODO: Implement on change event and propagate it to sessions
// Do something like "onJobChange" here...

View File

@@ -1,7 +1,7 @@
import {Client} from "./Client/Client";
import {ClientEvents} from "./Client/ClientEvents";
import ClientSessionManager from "./Client/ClientSessionManager";
import {Job} from "./Job";
import {Job} from "./Job/Job";
import Logger from "./Logger";
const smpp = require("smpp");
@@ -40,11 +40,12 @@ async function main() {
destination_addr: "1234567890",
short_message: "Hello World"
});
// client.sendMultipleDefault();
// client.on(ClientEvents.ANY_PDU, (pdu: any) => console.log(pdu));
client.on(ClientEvents.STATE_CHANGED, (state: any) => console.log(state.defaultMultipleJob));
client.setDefaultSingleJob(new Job(pdu1));
client.setDefaultMultipleJob(new Job(pdu1, 100, 10));
client.sendMultipleDefault();
client.on(ClientEvents.ANY_PDU, (pdu: any) => console.log(pdu));
});
}