From 173e452e529aec2ed4692dfbbccd0b97f3e464eb Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Thu, 5 Dec 2019 16:45:14 +0700 Subject: [PATCH] Autosplit --- lib/message-splitter.js | 4 ++++ lib/transport.js | 48 +++++++++++++++++++++++++++++++++++------------- package-lock.json | 19 +++++++++++++------ package.json | 3 ++- 4 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 lib/message-splitter.js diff --git a/lib/message-splitter.js b/lib/message-splitter.js new file mode 100644 index 0000000..d28140c --- /dev/null +++ b/lib/message-splitter.js @@ -0,0 +1,4 @@ +module.exports = (msg, maxLength) => [ + msg.trim().slice(0, maxLength).trim(), + msg.trim().slice(maxLength).trim(), +]; diff --git a/lib/transport.js b/lib/transport.js index 07679e1..a4bb4ee 100644 --- a/lib/transport.js +++ b/lib/transport.js @@ -1,28 +1,26 @@ const axios = require('axios'); const moment = require('moment'); +const uniqid = require('uniqid'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const messagingClient = require('komodo-center-messaging-client-lib'); const modems = require('./modems'); +const messageSplitter = require('./message-splitter'); -exports.send = async (partner, msg) => { - if (typeof partner !== 'string' || !partner.trim()) return; - if (typeof msg !== 'string' || !msg.trim()) return; +async function sendToModem(partner, msg, modem, parentXid) { + const xid = parentXid || uniqid(); - const modem = modems.randomModem(); - if (!modem) { - logger.warn('TRANSPORT: Not sending message to EVO-CP because of no available modem', { - partner, - msg, - }); + const [msgHead, msgTail] = messageSplitter(msg.trim(), 160); + if (msgHead) { return; } logger.info('TRANSPORT: Sending message to EVO-CP', { + xid, partner, - msg, + msgHead, modem: modem.name, }); @@ -32,15 +30,16 @@ exports.send = async (partner, msg) => { to: partner, password: config.sender.password, ts: moment().format('YYYY-MM-DD HH:mm:ss'), - text: msg.trim(), + text: msgHead, modem: modem.name, username: config.sender.username, }, }); } catch (e) { logger.warn('TRANSPORT: Exception on sending message to EVO-CP', { + xid, partner, - msg, + msgHead, e: e.message, }); } @@ -49,11 +48,34 @@ exports.send = async (partner, msg) => { me: modem.imsi || modem.name, partner, partner_raw: partner, - msg: msg.trim(), + msg: msgHead, origin_label: modem.imsi || modem.name, origin_transport: 'SMS', origin_partner: partner, do_not_forward_to_core: true, is_outgoing: true, }); + + if (msgTail) { + sendToModem(partner, msgTail, modem); + } +} + +exports.send = async (partner, msg) => { + if (typeof partner !== 'string' || !partner.trim()) return; + if (typeof msg !== 'string' || !msg.trim()) return; + + const xid = uniqid(); + + const modem = modems.randomModem(); + if (!modem) { + logger.warn('TRANSPORT: Not sending message to EVO-CP because of no available modem', { + xid, + partner, + msg, + }); + return; + } + + sendToModem(partner, msg.trim(), modem, xid); }; diff --git a/package-lock.json b/package-lock.json index b6ac25a..d431cb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2653,6 +2653,16 @@ "winston": "^3.2.1", "winston-circular-buffer": "^1.0.0", "winston-daily-rotate-file": "^3.10.0" + }, + "dependencies": { + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "requires": { + "macaddress": "^0.2.8" + } + } } }, "kuler": { @@ -4547,12 +4557,9 @@ } }, "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "requires": { - "macaddress": "^0.2.8" - } + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.2.0.tgz", + "integrity": "sha512-LH8zsvwJ/GL6YtNfSOmMCrI9piraAUjBfw2MCvleNE6a4pVKJwXjG2+HWhkVeFcSg+nmaPKbMrMOoxwQluZ1Mg==" }, "unpipe": { "version": "1.0.0", diff --git a/package.json b/package.json index a6b6165..eda1e30 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "express": "^4.17.1", "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git", - "moment": "^2.24.0" + "moment": "^2.24.0", + "uniqid": "^5.2.0" }, "devDependencies": { "eslint": "^6.7.2", -- 1.9.0