peer-emitter
Version:
acknowledgeable events
58 lines (42 loc) • 1.22 kB
JavaScript
var streams = require('stream');
var Writable = streams.Writable;
var PassThrough = streams.PassThrough;
module.exports = WriteStream;
function WriteStream(emitter, name) {
var stream = new Writable({
objectMode: true
});
var ackStream;
var timeoutStream;
stream._write = write;
function write(data, _, cb) {
function onAck(timeout) {
if (!timeout && ackStream)
ackStream.write(data);
if (timeout && timeoutStream)
timeoutStream.write(data);
}
if (timeoutStream)
onAck.timeout = timeoutStream.timeout;
if (ackStream || timeoutStream)
emitter.emit(name, data, onAck);
else
emitter.emit(name, data);
cb();
}
stream.AckStream = createAckStream;
function createAckStream() {
if (ackStream)
throw Error('already created');
return ackStream = new PassThrough({ objectMode: true });
}
stream.TimeoutStream = createTimeoutStream;
function createTimeoutStream(options) {
if (timeoutStream)
throw Error('already created');
timeoutStream = new PassThrough({ objectMode: true });
timeoutStream.timeout = options && options.timeout;
return timeoutStream;
}
return stream;
}