diff --git a/src/Client/Client.ts b/src/Client/Client.ts index 8f6f833..be9ce46 100644 --- a/src/Client/Client.ts +++ b/src/Client/Client.ts @@ -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(); +export class Client implements SmppSession { + 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 { diff --git a/src/Client/ClientSessionManager.ts b/src/Client/ClientSessionManager.ts index 0450ab5..9779122 100644 --- a/src/Client/ClientSessionManager.ts +++ b/src/Client/ClientSessionManager.ts @@ -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"; diff --git a/src/Job.ts b/src/Job.ts deleted file mode 100644 index 0d28550..0000000 --- a/src/Job.ts +++ /dev/null @@ -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); - } -} \ No newline at end of file diff --git a/src/Job/Job.ts b/src/Job/Job.ts new file mode 100644 index 0000000..d592871 --- /dev/null +++ b/src/Job/Job.ts @@ -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 this._perSecond; + } + + set perSecond(value: number) { + this._perSecond = value; + this.eventEmitter.emit(JobEvents.STATE_CHANGED, {}); + } + + private _count?: number; + + get count(): number { + return 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); + } +} \ No newline at end of file diff --git a/src/Job/JobEvents.ts b/src/Job/JobEvents.ts new file mode 100644 index 0000000..d205964 --- /dev/null +++ b/src/Job/JobEvents.ts @@ -0,0 +1,3 @@ +export class JobEvents { + static readonly STATE_CHANGED: string = "STATE_CHANGED"; +} \ No newline at end of file diff --git a/src/SmppSession.ts b/src/SmppSession.ts index f630016..d245474 100644 --- a/src/SmppSession.ts +++ b/src/SmppSession.ts @@ -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... diff --git a/src/main.ts b/src/main.ts index 2b088d2..19db8fe 100644 --- a/src/main.ts +++ b/src/main.ts @@ -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)); }); }