From 2cf4686d2ba94aed463549650d8a492736aa6c59 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Thu, 5 Dec 2019 17:21:51 +0700 Subject: [PATCH] Lock modem for 2 secs --- lib/modem-locks.js | 21 +++++++++++++++++++++ lib/transport.js | 14 ++++++++++++++ package-lock.json | 5 +++++ package.json | 1 + 4 files changed, 41 insertions(+) create mode 100644 lib/modem-locks.js diff --git a/lib/modem-locks.js b/lib/modem-locks.js new file mode 100644 index 0000000..0df72ce --- /dev/null +++ b/lib/modem-locks.js @@ -0,0 +1,21 @@ +const locks = require('locks'); + +const mutexes = {}; + +exports.lock = (name) => new Promise((resolve) => { + if (!mutexes[name]) { + mutexes[name] = locks.createMutex(); + } + + mutexes[name].lock(() => { + resolve(true); + }); +}); + +exports.unlock = (name) => { + try { + if (mutexes[name]) mutexes[name].unlock(); + } catch (e) { + // + } +}; diff --git a/lib/transport.js b/lib/transport.js index c015484..06050e0 100644 --- a/lib/transport.js +++ b/lib/transport.js @@ -8,6 +8,15 @@ const messagingClient = require('komodo-center-messaging-client-lib'); const modems = require('./modems'); const messageSplitter = require('./message-splitter'); +const modemLocks = require('./modem-locks'); + +async function sleep(ms) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, ms); + }); +} async function sendToModem(partner, msg, modem, parentXid) { const xid = parentXid || uniqid(); @@ -24,6 +33,8 @@ async function sendToModem(partner, msg, modem, parentXid) { modem: modem.name, }); + await modemLocks.lock(modem.name); + try { await axios.get(config.sender.url, { params: { @@ -56,6 +67,9 @@ async function sendToModem(partner, msg, modem, parentXid) { is_outgoing: true, }); + await sleep(2000); + modemLocks.unlock(modem.name); + if (msgTail) { await sendToModem(partner, msgTail, modem); } diff --git a/package-lock.json b/package-lock.json index d431cb4..f06d11d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2713,6 +2713,11 @@ "path-exists": "^3.0.0" } }, + "locks": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz", + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0=" + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", diff --git a/package.json b/package.json index eda1e30..17daa5e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "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", + "locks": "^0.2.2", "moment": "^2.24.0", "uniqid": "^5.2.0" }, -- 1.9.0