Implement shared processors (processors that can be used on clients and centers)
This commit is contained in:
@@ -43,9 +43,9 @@ export default class Center extends SmppSession {
|
|||||||
this._defaultSingleJob = Job.createEmptySingle('deliver_sm');
|
this._defaultSingleJob = Job.createEmptySingle('deliver_sm');
|
||||||
this._defaultMultipleJob = Job.createEmptyMultiple('deliver_sm');
|
this._defaultMultipleJob = Job.createEmptyMultiple('deliver_sm');
|
||||||
|
|
||||||
ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(SubmitSmReplyProcessor.name));
|
ProcessorManager.attachProcessors(this, ProcessorManager.getProcessors(SubmitSmReplyProcessor.name));
|
||||||
ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(BindTranscieverReplyProcessor.name));
|
ProcessorManager.attachProcessors(this, ProcessorManager.getProcessors(BindTranscieverReplyProcessor.name));
|
||||||
ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(EnquireLinkReplyProcessor.name));
|
ProcessorManager.attachProcessors(this, ProcessorManager.getProcessors(EnquireLinkReplyProcessor.name));
|
||||||
|
|
||||||
this.logger = new Logger(`Center-${id}`);
|
this.logger = new Logger(`Center-${id}`);
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@ export default 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');
|
||||||
|
|
||||||
ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(DeliverSmReplyProcessor.name));
|
ProcessorManager.attachProcessors(this, ProcessorManager.getProcessors(DeliverSmReplyProcessor.name));
|
||||||
|
|
||||||
this.logger = new Logger(`Client-${id}`);
|
this.logger = new Logger(`Client-${id}`);
|
||||||
}
|
}
|
||||||
|
@@ -31,16 +31,16 @@ export default class CenterRequestHandler extends RequestHandler {
|
|||||||
|
|
||||||
doAddProcessor(req: any, res: any): void {
|
doAddProcessor(req: any, res: any): void {
|
||||||
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
||||||
let processor: PduProcessor = ProcessorManager.getProcessor(req.body.name);
|
let processors: PduProcessor[] = ProcessorManager.getProcessors(req.body.name);
|
||||||
ProcessorManager.attachProcessor(session, processor);
|
ProcessorManager.attachProcessors(session, processors);
|
||||||
res.send(session.serialize());
|
res.send(session.serialize());
|
||||||
}, this.handleSessionNotFound.bind(this, req, res));
|
}, this.handleSessionNotFound.bind(this, req, res));
|
||||||
}
|
}
|
||||||
|
|
||||||
doRemoveProcessor(req: any, res: any): void {
|
doRemoveProcessor(req: any, res: any): void {
|
||||||
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
||||||
let processor: PduProcessor = ProcessorManager.getProcessor(req.body.name);
|
let processors: PduProcessor[] = ProcessorManager.getProcessors(req.body.name);
|
||||||
ProcessorManager.detachProcessor(session, processor);
|
ProcessorManager.detachProcessors(session, processors);
|
||||||
res.send(session.serialize());
|
res.send(session.serialize());
|
||||||
}, this.handleSessionNotFound.bind(this, req, res));
|
}, this.handleSessionNotFound.bind(this, req, res));
|
||||||
}
|
}
|
||||||
|
@@ -31,16 +31,16 @@ export default class ClientRequestHandler extends RequestHandler {
|
|||||||
|
|
||||||
doAddProcessor(req: any, res: any): void {
|
doAddProcessor(req: any, res: any): void {
|
||||||
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
||||||
let processor: PduProcessor = ProcessorManager.getProcessor(req.body.name);
|
let processors: PduProcessor[] = ProcessorManager.getProcessors(req.body.name);
|
||||||
ProcessorManager.attachProcessor(session, processor);
|
ProcessorManager.attachProcessors(session, processors);
|
||||||
res.send(session.serialize());
|
res.send(session.serialize());
|
||||||
}, this.handleSessionNotFound.bind(this, req, res));
|
}, this.handleSessionNotFound.bind(this, req, res));
|
||||||
}
|
}
|
||||||
|
|
||||||
doRemoveProcessor(req: any, res: any): void {
|
doRemoveProcessor(req: any, res: any): void {
|
||||||
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
this.sessionManager.getSession(req.params.id).then((session: SmppSession) => {
|
||||||
let processor: PduProcessor = ProcessorManager.getProcessor(req.body.name);
|
let processors: PduProcessor[] = ProcessorManager.getProcessors(req.body.name);
|
||||||
ProcessorManager.detachProcessor(session, processor);
|
ProcessorManager.detachProcessors(session, processors);
|
||||||
res.send(session.serialize());
|
res.send(session.serialize());
|
||||||
}, this.handleSessionNotFound.bind(this, req, res));
|
}, this.handleSessionNotFound.bind(this, req, res));
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,8 @@ export default class ProcessorManager {
|
|||||||
ProcessorManager.preprocessors = [
|
ProcessorManager.preprocessors = [
|
||||||
new DestinationEnumeratorProcessor(Client.name),
|
new DestinationEnumeratorProcessor(Client.name),
|
||||||
new SourceEnumeratorProcessor(Client.name),
|
new SourceEnumeratorProcessor(Client.name),
|
||||||
|
new DestinationEnumeratorProcessor(Center.name),
|
||||||
|
new SourceEnumeratorProcessor(Center.name),
|
||||||
new DeliveryReceiptRequestProcessor(Client.name),
|
new DeliveryReceiptRequestProcessor(Client.name),
|
||||||
new LongSmsProcessor(Client.name)
|
new LongSmsProcessor(Client.name)
|
||||||
];
|
];
|
||||||
@@ -44,28 +46,42 @@ export default class ProcessorManager {
|
|||||||
return this.preprocessors.concat(this.postprocessors);
|
return this.preprocessors.concat(this.postprocessors);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getProcessor(name: string): PduProcessor {
|
static getProcessors(name: string): PduProcessor[] {
|
||||||
this.logger.log1(`Looking for processor with name ${name}...`);
|
this.logger.log1(`Looking for processor with name ${name}...`);
|
||||||
let pduProcessor: PduProcessor | undefined = this.processors.find((processor: PduProcessor) => processor.name === name);
|
let pduProcessors: PduProcessor[] = this.processors.filter((processor: PduProcessor) => processor.name === name);
|
||||||
if (pduProcessor) {
|
this.logger.log1(`Found ${pduProcessors.length} processor(s) with name ${name}`);
|
||||||
this.logger.log1(`Found processor with name ${name}`);
|
return pduProcessors;
|
||||||
return pduProcessor;
|
}
|
||||||
} else {
|
|
||||||
this.logger.log1(`Processor with name ${name} not found`);
|
static attachProcessors(session: SmppSession, processors: PduProcessor[]): void {
|
||||||
return this.processors[0];
|
this.logger.log1(`Trying to attach processor ${processors.toString()} to session ${session.constructor.name}-${session.id}`);
|
||||||
|
for (const processor of processors) {
|
||||||
|
if (this.areCompatible(session, processor)) {
|
||||||
|
// This could be done a little better but this is OK for now
|
||||||
|
switch (processor.type) {
|
||||||
|
case Preprocessor.name:
|
||||||
|
session.attachPreprocessor(processor);
|
||||||
|
break;
|
||||||
|
case Postprocessor.name:
|
||||||
|
session.attachPostprocessor(processor);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.logger.log1(`Processor ${processor.name} is not a preprocessor or a postprocessor`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static attachProcessor(session: SmppSession, processor: PduProcessor): void {
|
static detachProcessors(session: SmppSession, processors: PduProcessor[]): void {
|
||||||
this.logger.log1(`Trying to attach preprocessor ${processor.name} to session ${session.constructor.name}-${session.id}`);
|
this.logger.log1(`Trying to detach processors ${processors.toString()} from session ${session.constructor.name}-${session.id}`);
|
||||||
if (this.areCompatible(session, processor)) {
|
for (const processor of processors) {
|
||||||
// This could be done a little better but this is OK for now
|
|
||||||
switch (processor.type) {
|
switch (processor.type) {
|
||||||
case Preprocessor.name:
|
case Preprocessor.name:
|
||||||
session.attachPreprocessor(processor);
|
session.detachPreprocessor(processor);
|
||||||
break;
|
break;
|
||||||
case Postprocessor.name:
|
case Postprocessor.name:
|
||||||
session.attachPostprocessor(processor);
|
session.detachPostprocessor(processor);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.logger.log1(`Processor ${processor.name} is not a preprocessor or a postprocessor`);
|
this.logger.log1(`Processor ${processor.name} is not a preprocessor or a postprocessor`);
|
||||||
@@ -74,21 +90,6 @@ export default class ProcessorManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static detachProcessor(session: SmppSession, processor: PduProcessor): void {
|
|
||||||
this.logger.log1(`Trying to detach processor ${processor.name} from session ${session.constructor.name}-${session.id}`);
|
|
||||||
switch (processor.type) {
|
|
||||||
case Preprocessor.name:
|
|
||||||
session.detachPreprocessor(processor);
|
|
||||||
break;
|
|
||||||
case Postprocessor.name:
|
|
||||||
session.detachPostprocessor(processor);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.logger.log1(`Processor ${processor.name} is not a preprocessor or a postprocessor`);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static areCompatible(session: SmppSession, processor: PduProcessor): boolean {
|
static areCompatible(session: SmppSession, processor: PduProcessor): boolean {
|
||||||
this.logger.log1(`Checking compatibility between session ${session.constructor.name}-${session.id} and processor ${processor.name}`);
|
this.logger.log1(`Checking compatibility between session ${session.constructor.name}-${session.id} and processor ${processor.name}`);
|
||||||
return session.constructor.name === processor.sessionType;
|
return session.constructor.name === processor.sessionType;
|
||||||
|
@@ -74,13 +74,12 @@ export default abstract class SessionManager {
|
|||||||
|
|
||||||
let loadedProcessors: PduProcessor[] = session.preprocessors.concat(session.postprocessors);
|
let loadedProcessors: PduProcessor[] = session.preprocessors.concat(session.postprocessors);
|
||||||
sessionObj.appliedProcessors.forEach((processor: PduProcessor) => {
|
sessionObj.appliedProcessors.forEach((processor: PduProcessor) => {
|
||||||
if (!loadedProcessors.find(p => p.name === processor.name)) {
|
let processorsToDetach: PduProcessor[] = loadedProcessors.filter(p => p.name === processor.name);
|
||||||
ProcessorManager.detachProcessor(sessionObj, processor);
|
ProcessorManager.detachProcessors(sessionObj, processorsToDetach);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
loadedProcessors.forEach((processor: PduProcessor) => {
|
loadedProcessors.forEach((processor: PduProcessor) => {
|
||||||
if (!sessionObj.appliedProcessors.find(p => p.name === processor.name)) {
|
if (!sessionObj.appliedProcessors.find(p => p.name === processor.name)) {
|
||||||
ProcessorManager.attachProcessor(sessionObj, ProcessorManager.getProcessor(processor.name));
|
ProcessorManager.attachProcessors(sessionObj, ProcessorManager.getProcessors(processor.name));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -227,9 +227,11 @@ export default abstract class SmppSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private detachProcessor(processor: PduProcessor, array: PduProcessor[]): void {
|
private detachProcessor(processor: PduProcessor, array: PduProcessor[]): void {
|
||||||
array.splice(array.indexOf(processor), 1);
|
if (array.indexOf(processor) >= 0) {
|
||||||
this.logger.log1(`Detaching PDU processor: ${processor.constructor.name}-${this.id}, now active: ${array.length} processors`);
|
array.splice(array.indexOf(processor), 1);
|
||||||
this.eventEmitter.emit(this.EVENT.STATE_CHANGED, this.serialize());
|
this.logger.log1(`Detaching PDU processor: ${processor.constructor.name}-${this.id}, now active: ${array.length} processors`);
|
||||||
|
this.eventEmitter.emit(this.EVENT.STATE_CHANGED, this.serialize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private attachProcessor(processor: PduProcessor, array: PduProcessor[]): void {
|
private attachProcessor(processor: PduProcessor, array: PduProcessor[]): void {
|
||||||
|
Reference in New Issue
Block a user