diffusion
Version:
Diffusion JavaScript client
55 lines (43 loc) • 1.46 kB
JavaScript
/*eslint valid-jsdoc: "off"*/
var SubscriptionImpl = require('features/topics/subscription');
var Emitter = require('events/emitter');
/**
* Internal proxy for Subscriptions.
*
* @param registry - StreamRegistry
* @param selector - Topic selector
* @param callback - Optional callback for subscription
*/
module.exports = function SubscriptionProxy(registry, selector, fallback) {
var emitter = new Emitter();
var stream = emitter.get();
var self = this;
var subscription = new SubscriptionImpl(registry, stream, fallback, selector);
stream.on('close', function() {
registry.remove(self);
});
this.subscription = subscription;
this.emitter = emitter;
this.selects = function() {
return true;
};
this.onOpen = function() {
emitter.emit('open', subscription);
};
this.onDelta = function(topic, details, specification, value) {
emitter.emit('update', value, topic);
};
this.onValue = function(topic, details, specification, value) {
emitter.emit('update', value, topic);
};
this.onSubscription = function(topic, details) {
emitter.emit('subscribe', details, topic);
};
this.onUnsubscription = function(topic, details, specification, reason) {
emitter.emit('unsubscribe', reason, topic);
};
this.onSubscriptionError = function (err) {
emitter.error(err);
registry.remove(self);
};
};