diffusion
Version:
Diffusion JavaScript client
53 lines (39 loc) • 1.37 kB
JavaScript
var ValueStreamProxy = require('features/topics/value-stream-proxy');
var Emitter = require('events/emitter');
function SubscriptionImpl(registry, stream, fallback, selector) {
for (var fn in stream) {
this[fn] = stream[fn];
}
this.selector = selector;
var self = this;
this.asType = function(datatype, callback) {
var proxy = new ValueStreamProxy(registry, selector, datatype, fallback, callback);
self.on('error', function(error) {
proxy.onSubscriptionError(error);
});
return proxy.subscription;
};
this.transform = function(fn) {
var e = new Emitter();
self.on('open', function(selector) {
e.emit('open', selector, self);
});
self.on('close', function() {
e.emit('close');
});
self.on('update', function(update, topic) {
e.emit('update', fn(update), topic);
});
self.on('subscribe', function(details) {
e.emit('subscribe', details);
});
self.on('unsubscribe', function(reason, topic) {
e.emit('unsubscribe', reason, topic);
});
self.on('error', function(error) {
e.error(error);
});
return new SubscriptionImpl(registry, e.get(), selector);
};
}
module.exports = SubscriptionImpl;