Implement center sending as well

This commit is contained in:
2023-11-09 11:31:49 +01:00
parent da41b51af1
commit 8df518e2c0
2 changed files with 12 additions and 14 deletions

View File

@@ -37,15 +37,15 @@ let success = 0;
let failed = 0; let failed = 0;
const sendTimer = new NanoTimer(); const sendTimer = new NanoTimer();
function startInterval(session) { function startInterval(session, sessionLogger) {
sendTimer.setInterval( sendTimer.setInterval(
async () => { async () => {
if (sent >= options.messagecount) { if (sent >= options.messagecount) {
logger.info(`Finished sending messages success:${success}, failed:${failed}, idling...`); logger.info(`Finished sending messages success:${success}, failed:${failed}, idling...`);
sendTimer.clearInterval(); sendTimer.clearInterval();
} else if (inFlight < options.window) { } else if (inFlight < options.window) {
logger.info(`Sending message ${sent + 1}/${options.messagecount}`); sessionLogger.info(`Sending message ${sent + 1}/${options.messagecount}`);
session.submit_sm( session.deliver_sm(
{ {
source_addr: options.source, source_addr: options.source,
destination_addr: options.destination, destination_addr: options.destination,
@@ -54,10 +54,10 @@ function startInterval(session) {
function (pdu) { function (pdu) {
inFlight--; inFlight--;
if (pdu.command_status === 0) { if (pdu.command_status === 0) {
logger.info(`Received response with id ${pdu.message_id}`); sessionLogger.info(`Received response with id ${pdu.message_id}`);
success++; success++;
} else { } else {
logger.warn(`Message failed with id ${pdu.message_id}`); sessionLogger.warn(`Message failed with id ${pdu.message_id}`);
failed++; failed++;
} }
} }
@@ -65,9 +65,11 @@ function startInterval(session) {
sent++; sent++;
inFlight++; inFlight++;
} else { } else {
logger.warn(`${inFlight}/${options.window} messages pending, waiting for a reply before sending more`); sessionLogger.warn(
`${inFlight}/${options.window} messages pending, waiting for a reply before sending more`
);
sendTimer.clearInterval(); sendTimer.clearInterval();
setTimeout(() => startInterval(session), options.windowsleep); setTimeout(() => startInterval(session, sessionLogger), options.windowsleep);
} }
}, },
"", "",
@@ -76,7 +78,6 @@ function startInterval(session) {
} }
logger.info(`Staring server on port ${options.port}...`); logger.info(`Staring server on port ${options.port}...`);
let sessions = {};
let sessionid = 1; let sessionid = 1;
let messageid = 0; let messageid = 0;
const server = smpp.createServer( const server = smpp.createServer(
@@ -88,9 +89,9 @@ const server = smpp.createServer(
session.on("bind_transceiver", function (pdu) { session.on("bind_transceiver", function (pdu) {
if (pdu.system_id === options.systemid && pdu.password === options.password) { if (pdu.system_id === options.systemid && pdu.password === options.password) {
// sessions[session] = true;
sessionLogger.info("Client connected"); sessionLogger.info("Client connected");
session.send(pdu.response()); session.send(pdu.response());
startInterval(session, sessionLogger);
} else { } else {
sessionLogger.warn( sessionLogger.warn(
`Client tried to connect with incorrect login ('${pdu.system_id}' '${pdu.password}'` `Client tried to connect with incorrect login ('${pdu.system_id}' '${pdu.password}'`
@@ -146,18 +147,16 @@ const server = smpp.createServer(
session.on("close", function () { session.on("close", function () {
sessionLogger.warn(`Session closed`); sessionLogger.warn(`Session closed`);
delete sessions[sessions];
session.close(); session.close();
}); });
session.on("error", function (err) { session.on("error", function (err) {
sessionLogger.error(`Fatal error ${err}`); sessionLogger.error(`Fatal error ${err}`);
delete sessions[sessions];
session.close(); session.close();
}); });
} }
); );
server.on('error', function(err) { server.on("error", function (err) {
logger.error(`Fatal server error ${err}`); logger.error(`Fatal server error ${err}`);
server.close(); server.close();
process.exit(1); process.exit(1);

View File

@@ -58,9 +58,8 @@ const centerOptions = [
{ name: "systemid", alias: "s", type: String, description: "SMPP related login info." }, { name: "systemid", alias: "s", type: String, description: "SMPP related login info." },
{ name: "password", alias: "w", type: String, description: "SMPP related login info." }, { name: "password", alias: "w", type: String, description: "SMPP related login info." },
{ name: "dr", type: Boolean, description: "Whether or not to send Delivery Reports.", defaultOption: false }, { name: "dr", type: Boolean, description: "Whether or not to send Delivery Reports.", defaultOption: false },
{ name: "sessions", type: Number, description: "Number of sessions to start, defaults to 1.", defaultOption: 1 },
{ {
name: "maxsessions", name: "sessions",
type: Number, type: Number,
description: "Maximum number of client sessions to accept, defaults to 8.", description: "Maximum number of client sessions to accept, defaults to 8.",
defaultOption: 8, defaultOption: 8,