Working commit
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
import {PDU} from "../CommonObjects";
|
import {PDU} from "../CommonObjects";
|
||||||
import {Job} from "../Job/Job";
|
import {Job} from "../Job/Job";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
import {DebugPduProcessor} from "../PDUProcessor/DebugPduProcessor";
|
|
||||||
import {PduProcessor} from "../PDUProcessor/PduProcessor";
|
import {PduProcessor} from "../PDUProcessor/PduProcessor";
|
||||||
|
import {DebugPduProcessor} from "../PDUProcessor/Postprocessor/Center/DebugPduProcessor";
|
||||||
|
import ProcessorManager from "../PDUProcessor/ProcessorManager";
|
||||||
import {SmppSession} from "../SmppSession";
|
import {SmppSession} from "../SmppSession";
|
||||||
|
|
||||||
const NanoTimer = require('nanotimer');
|
const NanoTimer = require('nanotimer');
|
||||||
@@ -117,7 +118,6 @@ export class Center extends SmppSession {
|
|||||||
initialize(): void {
|
initialize(): void {
|
||||||
this.server = smpp.createServer({}, this.eventSessionConnected.bind(this));
|
this.server = smpp.createServer({}, this.eventSessionConnected.bind(this));
|
||||||
this.server.listen(this.port);
|
this.server.listen(this.port);
|
||||||
PduProcessor.attachProcessor(this, PduProcessor.getProcessor(DebugPduProcessor.name));
|
|
||||||
this.setStatus(0);
|
this.setStatus(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ export class Center extends SmppSession {
|
|||||||
defaultSingleJob: this._defaultSingleJob.serialize(),
|
defaultSingleJob: this._defaultSingleJob.serialize(),
|
||||||
defaultMultipleJob: this._defaultMultipleJob.serialize(),
|
defaultMultipleJob: this._defaultMultipleJob.serialize(),
|
||||||
processors: this.pduProcessors.map(p => p.serialize()),
|
processors: this.pduProcessors.map(p => p.serialize()),
|
||||||
availableProcessors: PduProcessor.getProcessorsForType(Center.name)
|
availableProcessors: ProcessorManager.getProcessorsForType(this.constructor.name)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
import {Center} from "../Center/Center";
|
|
||||||
import {PDU} from "../CommonObjects";
|
import {PDU} from "../CommonObjects";
|
||||||
import {Job} from "../Job/Job";
|
import {Job} from "../Job/Job";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
import {DeliverSmReplyProcessor} from "../PDUProcessor/Client/DeliverSmReplyProcessor";
|
|
||||||
import {PduProcessor} from "../PDUProcessor/PduProcessor";
|
import {PduProcessor} from "../PDUProcessor/PduProcessor";
|
||||||
|
import {DeliverSmReplyProcessor} from "../PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor";
|
||||||
|
import ProcessorManager from "../PDUProcessor/ProcessorManager";
|
||||||
import PersistentPromise from "../PersistentPromise";
|
import PersistentPromise from "../PersistentPromise";
|
||||||
import {SmppSession} from "../SmppSession";
|
import {SmppSession} from "../SmppSession";
|
||||||
|
|
||||||
@@ -43,8 +43,6 @@ export class Client extends SmppSession {
|
|||||||
this._defaultSingleJob = Job.createEmptySingle('submit_sm');
|
this._defaultSingleJob = Job.createEmptySingle('submit_sm');
|
||||||
this._defaultMultipleJob = Job.createEmptyMultiple('submit_sm');
|
this._defaultMultipleJob = Job.createEmptyMultiple('submit_sm');
|
||||||
|
|
||||||
this.addPduProcessor(PduProcessor.getProcessor(DeliverSmReplyProcessor.name));
|
|
||||||
|
|
||||||
this.logger = new Logger(`Client-${id}`);
|
this.logger = new Logger(`Client-${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,7 +122,7 @@ export class Client extends SmppSession {
|
|||||||
defaultSingleJob: this._defaultSingleJob.serialize(),
|
defaultSingleJob: this._defaultSingleJob.serialize(),
|
||||||
defaultMultipleJob: this._defaultMultipleJob.serialize(),
|
defaultMultipleJob: this._defaultMultipleJob.serialize(),
|
||||||
processors: this.pduProcessors.map(p => p.serialize()),
|
processors: this.pduProcessors.map(p => p.serialize()),
|
||||||
availableProcessors: PduProcessor.getProcessorsForType(Client.name)
|
availableProcessors: ProcessorManager.getProcessorsForType(this.constructor.name)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
import {Center} from "../Center/Center";
|
|
||||||
import {Client} from "../Client/Client";
|
import {Client} from "../Client/Client";
|
||||||
import ClientSessionManager from "../Client/ClientSessionManager";
|
import ClientSessionManager from "../Client/ClientSessionManager";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
|
@@ -1,51 +1,11 @@
|
|||||||
import {PDU} from "../CommonObjects";
|
import {PDU} from "../CommonObjects";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
import {SmppSession} from "../SmppSession";
|
|
||||||
|
|
||||||
export abstract class PduProcessor {
|
export abstract class PduProcessor {
|
||||||
static processors: PduProcessor[] = [];
|
|
||||||
private static logger: Logger = new Logger("PduProcessor");
|
|
||||||
abstract readonly serverSessionType: string;
|
abstract readonly serverSessionType: string;
|
||||||
readonly name: string = this.constructor.name;
|
readonly name: string = this.constructor.name;
|
||||||
readonly logger: Logger = new Logger(`PduProcessor: ${this.name}`);
|
readonly logger: Logger = new Logger(`PduProcessor: ${this.name}`);
|
||||||
|
|
||||||
static getProcessor(name: string): PduProcessor {
|
|
||||||
this.logger.log1(`Looking for processor with name ${name}...`);
|
|
||||||
let pduProcessor = this.processors.find((processor: PduProcessor) => processor.name === name);
|
|
||||||
if (pduProcessor) {
|
|
||||||
this.logger.log1(`Found processor with name ${name}`);
|
|
||||||
return pduProcessor;
|
|
||||||
} else {
|
|
||||||
this.logger.log1(`Processor with name ${name} not found`);
|
|
||||||
return this.processors[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static attachProcessor(session: SmppSession, processor: PduProcessor): void {
|
|
||||||
this.logger.log1(`Trying to attach processor ${processor.name} to session ${session.constructor.name}-${session.id}`);
|
|
||||||
if (PduProcessor.areCompatible(session, processor)) {
|
|
||||||
session.addPduProcessor(processor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static detachProcessor(session: SmppSession, processor: PduProcessor): void {
|
|
||||||
this.logger.log1(`Trying to detach processor ${processor.name} from session ${session.constructor.name}-${session.id}`);
|
|
||||||
session.removePduProcessor(processor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static areCompatible(session: SmppSession, processor: PduProcessor): boolean {
|
|
||||||
this.logger.log1(`Checking compatibility between session ${session.constructor.name}-${session.id} and processor ${processor.name}`);
|
|
||||||
return session.constructor.name === processor.serverSessionType;
|
|
||||||
}
|
|
||||||
|
|
||||||
static addProcessor(processor: new () => PduProcessor): void {
|
|
||||||
PduProcessor.processors.push(new processor());
|
|
||||||
}
|
|
||||||
|
|
||||||
static getProcessorsForType(type: string): PduProcessor[] {
|
|
||||||
return this.processors.filter((processor: PduProcessor) => processor.serverSessionType === type);
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any>;
|
abstract processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any>;
|
||||||
|
|
||||||
serialize(): object {
|
serialize(): object {
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
import {Center} from "../Center/Center";
|
import {Center} from "../../../Center/Center";
|
||||||
import {PDU} from "../CommonObjects";
|
import {PDU} from "../../../CommonObjects";
|
||||||
import {PduProcessor} from "./PduProcessor";
|
import Postprocessor from "../Postprocessor";
|
||||||
|
|
||||||
export class DebugPduProcessor extends PduProcessor {
|
export class DebugPduProcessor extends Postprocessor {
|
||||||
serverSessionType: string = Center.name;
|
serverSessionType: string = Center.name;
|
||||||
|
|
||||||
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
@@ -1,10 +1,10 @@
|
|||||||
import {Center} from "../Center/Center";
|
import {Center} from "../../../Center/Center";
|
||||||
import {PDU} from "../CommonObjects";
|
import {PDU} from "../../../CommonObjects";
|
||||||
import {PduProcessor} from "./PduProcessor";
|
import Postprocessor from "../Postprocessor";
|
||||||
|
|
||||||
const smpp = require("smpp");
|
const smpp = require("smpp");
|
||||||
|
|
||||||
export class EchoPduProcessor extends PduProcessor {
|
export class EchoPduProcessor extends Postprocessor {
|
||||||
serverSessionType: string = Center.name;
|
serverSessionType: string = Center.name;
|
||||||
|
|
||||||
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
@@ -1,8 +1,8 @@
|
|||||||
import {Client} from "../../Client/Client";
|
import {Client} from "../../../Client/Client";
|
||||||
import {PDU} from "../../CommonObjects";
|
import {PDU} from "../../../CommonObjects";
|
||||||
import {PduProcessor} from "../PduProcessor";
|
import Postprocessor from "../Postprocessor";
|
||||||
|
|
||||||
export class DeliverSmReplyProcessor extends PduProcessor {
|
export class DeliverSmReplyProcessor extends Postprocessor {
|
||||||
serverSessionType: string = Client.name;
|
serverSessionType: string = Client.name;
|
||||||
|
|
||||||
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
processPdu(session: any, pdu: PDU, ...args: any[]): Promise<any> {
|
5
src/PDUProcessor/Postprocessor/Postprocessor.ts
Normal file
5
src/PDUProcessor/Postprocessor/Postprocessor.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import {PduProcessor} from "../PduProcessor";
|
||||||
|
|
||||||
|
export default abstract class Postprocessor extends PduProcessor {
|
||||||
|
readonly type: string = this.name;
|
||||||
|
}
|
@@ -1,8 +1,8 @@
|
|||||||
import {Client} from "../../Client/Client";
|
import {Client} from "../../../Client/Client";
|
||||||
import {PDU} from "../../CommonObjects";
|
import {PDU} from "../../../CommonObjects";
|
||||||
import {PduProcessor} from "../PduProcessor";
|
import Preprocessor from "../Preprocessor";
|
||||||
|
|
||||||
export class DestinationEnumeratorProcessor extends PduProcessor {
|
export class DestinationEnumeratorProcessor extends Preprocessor {
|
||||||
serverSessionType: string = Client.name;
|
serverSessionType: string = Client.name;
|
||||||
private iterator = 0;
|
private iterator = 0;
|
||||||
|
|
@@ -1,8 +1,8 @@
|
|||||||
import {Client} from "../../Client/Client";
|
import {Client} from "../../../Client/Client";
|
||||||
import {PDU} from "../../CommonObjects";
|
import {PDU} from "../../../CommonObjects";
|
||||||
import {PduProcessor} from "../PduProcessor";
|
import Preprocessor from "../Preprocessor";
|
||||||
|
|
||||||
export class SourceEnumeratorProcessor extends PduProcessor {
|
export class SourceEnumeratorProcessor extends Preprocessor {
|
||||||
serverSessionType: string = Client.name;
|
serverSessionType: string = Client.name;
|
||||||
private iterator = 0;
|
private iterator = 0;
|
||||||
|
|
5
src/PDUProcessor/Preprocessor/Preprocessor.ts
Normal file
5
src/PDUProcessor/Preprocessor/Preprocessor.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import {PduProcessor} from "../PduProcessor";
|
||||||
|
|
||||||
|
export default abstract class Preprocessor extends PduProcessor {
|
||||||
|
readonly type: string = this.name;
|
||||||
|
}
|
61
src/PDUProcessor/ProcessorManager.ts
Normal file
61
src/PDUProcessor/ProcessorManager.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import Logger from "../Logger";
|
||||||
|
import {SmppSession} from "../SmppSession";
|
||||||
|
import {PduProcessor} from "./PduProcessor";
|
||||||
|
import {DebugPduProcessor} from "./Postprocessor/Center/DebugPduProcessor";
|
||||||
|
import {EchoPduProcessor} from "./Postprocessor/Center/EchoPduProcessor";
|
||||||
|
import {DeliverSmReplyProcessor} from "./Postprocessor/Client/DeliverSmReplyProcessor";
|
||||||
|
import {DestinationEnumeratorProcessor} from "./Preprocessor/Client/DestinationEnumeratorProcessor";
|
||||||
|
import {SourceEnumeratorProcessor} from "./Preprocessor/Client/SourceEnumeratorProcessor";
|
||||||
|
|
||||||
|
export default class ProcessorManager {
|
||||||
|
static readonly preprocessors: PduProcessor[] = [
|
||||||
|
new DestinationEnumeratorProcessor(),
|
||||||
|
new SourceEnumeratorProcessor()
|
||||||
|
];
|
||||||
|
static readonly postprocessors: PduProcessor[] = [
|
||||||
|
new DebugPduProcessor(),
|
||||||
|
new EchoPduProcessor(),
|
||||||
|
new DeliverSmReplyProcessor(),
|
||||||
|
];
|
||||||
|
private static readonly logger: Logger = new Logger(this.name);
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static get processors(): PduProcessor[] {
|
||||||
|
return this.preprocessors.concat(this.postprocessors);
|
||||||
|
}
|
||||||
|
|
||||||
|
static getProcessor(name: string): PduProcessor {
|
||||||
|
this.logger.log1(`Looking for processor with name ${name}...`);
|
||||||
|
let pduProcessor: PduProcessor | undefined = this.processors.find((processor: PduProcessor) => processor.name === name);
|
||||||
|
if (pduProcessor) {
|
||||||
|
this.logger.log1(`Found processor with name ${name}`);
|
||||||
|
return pduProcessor;
|
||||||
|
} else {
|
||||||
|
this.logger.log1(`Processor with name ${name} not found`);
|
||||||
|
return this.processors[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static attachProcessor(session: SmppSession, processor: PduProcessor): void {
|
||||||
|
this.logger.log1(`Trying to attach processor ${processor.name} to session ${session.constructor.name}-${session.id}`);
|
||||||
|
if (this.areCompatible(session, processor)) {
|
||||||
|
session.addPduProcessor(processor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static detachProcessor(session: SmppSession, processor: PduProcessor): void {
|
||||||
|
this.logger.log1(`Trying to detach processor ${processor.name} from session ${session.constructor.name}-${session.id}`);
|
||||||
|
session.removePduProcessor(processor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static areCompatible(session: SmppSession, processor: PduProcessor): boolean {
|
||||||
|
this.logger.log1(`Checking compatibility between session ${session.constructor.name}-${session.id} and processor ${processor.name}`);
|
||||||
|
return session.constructor.name === processor.serverSessionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
static getProcessorsForType(type: string): PduProcessor[] {
|
||||||
|
return this.processors.filter((processor: PduProcessor) => processor.serverSessionType === type);
|
||||||
|
}
|
||||||
|
}
|
20
src/main.ts
20
src/main.ts
@@ -4,31 +4,25 @@ import {Client} from "./Client/Client";
|
|||||||
import ClientSessionManager from "./Client/ClientSessionManager";
|
import ClientSessionManager from "./Client/ClientSessionManager";
|
||||||
import {HttpServer} from "./HttpServer/HttpServer";
|
import {HttpServer} from "./HttpServer/HttpServer";
|
||||||
import Logger from "./Logger";
|
import Logger from "./Logger";
|
||||||
import {DeliverSmReplyProcessor} from "./PDUProcessor/Client/DeliverSmReplyProcessor";
|
|
||||||
import {DestinationEnumeratorProcessor} from "./PDUProcessor/Client/DestinationEnumeratorProcessor";
|
|
||||||
import {SourceEnumeratorProcessor} from "./PDUProcessor/Client/SourceEnumeratorProcessor";
|
|
||||||
import {DebugPduProcessor} from "./PDUProcessor/DebugPduProcessor";
|
|
||||||
import {EchoPduProcessor} from "./PDUProcessor/EchoPduProcessor";
|
|
||||||
import {PduProcessor} from "./PDUProcessor/PduProcessor";
|
import {PduProcessor} from "./PDUProcessor/PduProcessor";
|
||||||
|
import {DebugPduProcessor} from "./PDUProcessor/Postprocessor/Center/DebugPduProcessor";
|
||||||
|
import {EchoPduProcessor} from "./PDUProcessor/Postprocessor/Center/EchoPduProcessor";
|
||||||
|
import {DeliverSmReplyProcessor} from "./PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor";
|
||||||
|
import {DestinationEnumeratorProcessor} from "./PDUProcessor/Preprocessor/Client/DestinationEnumeratorProcessor";
|
||||||
|
import {SourceEnumeratorProcessor} from "./PDUProcessor/Preprocessor/Client/SourceEnumeratorProcessor";
|
||||||
import {WSServer} from "./WS/WSServer";
|
import {WSServer} from "./WS/WSServer";
|
||||||
|
|
||||||
const {PDU} = require("smpp");
|
const {PDU} = require("smpp");
|
||||||
|
|
||||||
let logger = new Logger("main");
|
let logger = new Logger("main");
|
||||||
|
|
||||||
PduProcessor.addProcessor(DebugPduProcessor);
|
|
||||||
PduProcessor.addProcessor(EchoPduProcessor);
|
|
||||||
PduProcessor.addProcessor(DestinationEnumeratorProcessor);
|
|
||||||
PduProcessor.addProcessor(SourceEnumeratorProcessor);
|
|
||||||
PduProcessor.addProcessor(DeliverSmReplyProcessor);
|
|
||||||
|
|
||||||
let clientManager: ClientSessionManager = new ClientSessionManager();
|
let clientManager: ClientSessionManager = new ClientSessionManager();
|
||||||
let centerManager: CenterSessionManager = new CenterSessionManager();
|
let centerManager: CenterSessionManager = new CenterSessionManager();
|
||||||
// TODO: Add support for encodings
|
// TODO: Add support for encodings
|
||||||
// TODO: Fix reading and writing processors
|
// TODO: Fix reading and writing processors
|
||||||
// TODO: Try creating multiple entries with the same arg
|
// TODO: Try creating multiple entries with the same arg
|
||||||
let wss: WSServer = new WSServer([clientManager, centerManager]);
|
// let wss: WSServer = new WSServer([clientManager, centerManager]);
|
||||||
let httpServer: HttpServer = new HttpServer(clientManager, centerManager);
|
// let httpServer: HttpServer = new HttpServer(clientManager, centerManager);
|
||||||
|
|
||||||
function cleanup(): void {
|
function cleanup(): void {
|
||||||
logger.log1("Cleaning up...");
|
logger.log1("Cleaning up...");
|
||||||
|
Reference in New Issue
Block a user