UNPKG

diffusion

Version:

Diffusion JavaScript client

55 lines (43 loc) 1.46 kB
/*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); }; };