UNPKG

13.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"RPCManager.js","sourceRoot":"","sources":["../src/RPCManager.ts"],"names":[],"mappings":"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","sourcesContent":["import util = require(\"util\");\nimport async = require(\"async\");\nimport crypto = require(\"crypto\");\nimport randomString = require(\"just.randomstring\");\nimport { channelManager } from './ChannelManager';\nimport { promiseNodeify } from './promise-nodeify';\n\nconst QUEUE_PREFIX = \"_queue_rpc:\";\nconst CALL_TIMEOUT = 3600 * 1000;\n\nvar returnCbs = {},\n replyQueue = \"\",\n DEBUG = false;\n\nfunction dbg(...args:any[]) {\n if (DEBUG) {\n console.log.apply(console, args);\n }\n}\n\nsetInterval(() => {\n // check every hour for expired callbacks\n var removeKeys = [],\n now = new Date().getTime(),\n k,\n timeCreated,\n data;\n for (k in returnCbs) {\n timeCreated = returnCbs[k].date.getTime();\n if (now - timeCreated >= CALL_TIMEOUT) {\n removeKeys.push(k);\n }\n }\n removeKeys.forEach((k) => {\n data = returnCbs[k];\n delete returnCbs[k];\n });\n}, 3600 * 1000);\n\nfunction _parseAction(event) {\n return {\n queue: QUEUE_PREFIX + event,\n };\n}\n\nfunction _errorPrepare(err) {\n if (!err) {\n return null;\n }\n return {\n code: err.code ? err.code : -1,\n msg: err.message,\n data: err.data,\n errtype: err.errtype\n };\n}\n\nexport interface Processors {\n\n}\n\nexport class RPCManager {\n processors:Processors;\n\n constructor() {\n this.processors = {};\n }\n\n private createQueue(action, cb?) {\n let promise = channelManager.getChannel().then((channel) => {\n return new Promise((resolve, reject) => {\n var actionParsed = _parseAction(action);\n channel.assertQueue(actionParsed.queue, {}, (err, attrs) => {\n if (err) return reject(err);\n\n channel.consume(actionParsed.queue, (msg) => {\n var content = JSON.parse(msg.content.toString());\n try {\n dbg(\"Incoming RPC request\", action);\n this.processors[action].listener(content, (err, body) => {\n var response = {\n error: _errorPrepare(err),\n body: typeof body !== \"undefined\" ? body : null\n };\n channel.sendToQueue(msg.properties.replyTo, new Buffer(JSON.stringify(response)), {\n correlationId: msg.properties.correlationId\n });\n\n dbg(\"Incoming RPC request\", action, \" processed! reply to\",\n msg.properties.replyTo);\n });\n }\n catch (ex) {\n console.error(\"ERROR IN rpc processor\\n\", ex.message, ex.stack);\n }\n channel.ack(msg);\n }, {}, (err, res) => {\n if (err) return reject(err);\n resolve(res.consumerTag);\n });\n });\n })\n });\n\n return promiseNodeify(promise, cb);\n };\n\n register(action, cb, registerCb) {\n registerCb = registerCb || (() => null);\n if (this.processors[action]) {\n throw new Error(\"Can't register same action processor twice\");\n }\n var consumerTag;\n async.series([\n (next) => {\n channelManager.connect(() => {\n next();\n });\n },\n (next) => {\n this.createQueue(action, (err, tag) => {\n if (!err) {\n consumerTag = tag;\n }\n next(err);\n });\n }\n ], (err) => {\n if (!err) {\n this.processors[action] = {\n listener: cb,\n consumerTag: consumerTag\n };\n }\n registerCb(err);\n });\n return true;\n };\n\n unregister(action, cb?) {\n let promise = channelManager.getChannel().then((channel) => {\n return new Promise((resolve, reject) => {\n if (!this.processors[action]) {\n process.nextTick(() => resolve(null));\n return;\n }\n channel.cancel(this.processors[action].consumerTag, (err) => {\n if (err) return reject(err);\n\n delete this.processors[action];\n resolve(null);\n });\n })\n });\n\n return promiseNodeify(promise, cb);\n };\n\n call(action, params, cb?) {\n let promise = channelManager.getChannel().then((channel) => {\n return new Promise((resolve, reject) => {\n if (typeof params === \"function\") {\n cb = params;\n params = {};\n }\n var actionParsed = _parseAction(action);\n async.series([\n (next) => {\n channelManager.connect(() => {\n next();\n });\n },\n (next) => {\n if (replyQueue) {\n return next();\n }\n channel.assertQueue(\"\", {\n durable: false,\n autoDelete: true\n }, (err, attrs) => {\n if (err) return reject(err);\n replyQueue = attrs.queue;\n channel.consume(replyQueue, (_msg) => {\n var msg = JSON.parse(_msg.content.toString()),\n correlationId = _msg.properties.correlationId;\n if (returnCbs[correlationId]) {\n dbg(\"RPC Response\", returnCbs[correlationId].action);\n\n var resError = null;\n if (msg.error) {\n resError = new Error(msg.error.msg);\n resError.code = msg.error.code;\n resError.errtype = msg.error.errtype;\n resError.data = msg.error.data;\n }\n var returnCb = returnCbs[correlationId].cb;\n delete returnCbs[correlationId];\n returnCb(resError, msg.body);\n }\n else {\n dbg(\"Obtained reply but unrecognized by correlationId:\", correlationId);\n }\n channel.ack(_msg);\n });\n next();\n });\n },\n () => {\n var correlationId = randomString(48);\n dbg(\"RPC Call\", action, \"wait reply to\", replyQueue);\n returnCbs[correlationId] = {\n date: new Date(),\n cb: cb,\n action: action,\n params: params\n };\n channel.sendToQueue(actionParsed.queue, new Buffer(JSON.stringify(params)), {\n correlationId: correlationId,\n replyTo: replyQueue\n });\n }\n ]);\n })\n });\n\n return promiseNodeify(promise, cb);\n }\n\n static purgeActionQueue(action, cb) {\n return channelManager.getChannel().then((channel) => {\n var actionParsed = _parseAction(action);\n channel.purgeQueue(actionParsed.queue, cb);\n });\n };\n\n}\n\n"]}
\No newline at end of file