Skip to content

Instantly share code, notes, and snippets.

@olamedia
Created December 16, 2016 15:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save olamedia/ab3111b80c7d452c10162b5420f02180 to your computer and use it in GitHub Desktop.
Save olamedia/ab3111b80c7d452c10162b5420f02180 to your computer and use it in GitHub Desktop.
const PassThrough = require('stream').PassThrough;
class duplexLayer{
constructor(connection) {
//super(options);
var self = this;
self.connection = connection;
// Downstream
self.downstreamLayer = null;
self.readableDownstream = null;
self.writableDownstream = null;
// Current layer:
self.readable = null;
self.writable = null;
// Upstream
self.upstreamLayer = [];
}
_receiveEvent(e){
var self = this;
if (e.bubble){
for (var k in self.upstreamLayer){
self.upstreamLayer[k].receiveEvent(e);
}
}
}
receiveEvent(e){
var self = this;
self._receiveEvent(e);
}
_sendEvent(connection, e){
var self = this;
if (null !== self.downstreamLayer){
self.downstreamLayer.sendEvent(e);
}else{
//connection.sendEvent(eventName, eventData); // ?? not really required
}
}
sendEvent(e){
var self = this;
self._sendEvent(e);
}
pipe(layer){
var self = this;
self.upstreamLayer.push(layer);
layer.downstreamLayer = self;
layer.readableDownstream = self.readable;
layer.writableDownstream = self.writable;
layer.readableDownstream.pipe(layer._readable());
layer._writable().pipe(layer.writableDownstream);
return layer;
}
wrap(duplex){
var self = this;
self.readableDownstream = self.writableDownstream = duplex;
self.readableDownstream.pipe(self._readable());
self._writable().pipe(self.writableDownstream);
}
_readable(){
var self = this;
if (null === self.readable){
self.readable = new PassThrough();
}
return self.readable;
}
_writable(){
var self = this;
if (null === self.writable){
self.writable = new PassThrough();
}
return self.writable;
}
}
module.exports = duplexLayer;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment