diff options
Diffstat (limited to 'app/scripts/lib/stream-provider.js')
-rw-r--r-- | app/scripts/lib/stream-provider.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/app/scripts/lib/stream-provider.js b/app/scripts/lib/stream-provider.js new file mode 100644 index 000000000..3e7f443c8 --- /dev/null +++ b/app/scripts/lib/stream-provider.js @@ -0,0 +1,50 @@ +const Duplex = require('readable-stream').Duplex +const inherits = require('util').inherits + +module.exports = StreamProvider + + +inherits(StreamProvider, Duplex) + +function StreamProvider(){ + Duplex.call(this, { + objectMode: true, + }) + + this._handlers = {} +} + +// public + +StreamProvider.prototype.send = function(payload){ + throw new Error('StreamProvider - does not support synchronous RPC calls') +} + +StreamProvider.prototype.sendAsync = function(payload, callback){ +// console.log('StreamProvider - sending payload', payload) + this._handlers[payload.id] = callback + this.push(payload) +} + +// private + +StreamProvider.prototype._onResponse = function(payload){ +// console.log('StreamProvider - got response', payload) + var callback = this._handlers[payload.id] + if (!callback) throw new Error('StreamProvider - Unknown response id') + delete this._handlers[payload.id] + callback(null, payload) +} + +// stream plumbing + +StreamProvider.prototype._read = noop + +StreamProvider.prototype._write = function(msg, encoding, cb){ + this._onResponse(msg) + cb() +} + +// util + +function noop(){}
\ No newline at end of file |