From 79cf2b7241cc5462173ba17926fe368dba876b8b Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Thu, 27 Feb 2014 18:30:05 +0100 Subject: [PATCH] Add subscriber manager --- .../common/websockets/subscriberManager.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 www/scripts/common/websockets/subscriberManager.js diff --git a/www/scripts/common/websockets/subscriberManager.js b/www/scripts/common/websockets/subscriberManager.js new file mode 100644 index 0000000000..f4af6c5634 --- /dev/null +++ b/www/scripts/common/websockets/subscriberManager.js @@ -0,0 +1,36 @@ +define([ + "underscore", + "backbone", + "common/websockets/connection" +], function (_, Backbone, WSConnection) { + var currentTopic = null; + var callbackStack = []; + + var callbackHandler = function (topic, msg) { + _.each(callbackStack, function(cb) { + cb(topic, msg); + }); + }; + + var reset = function () { + callbackStack = []; + currentTopic = null; + }; + + return { + 'register': function (topic) { + this.unregister(); + WSConnection.subscribe(topic, callbackHandler); + currentTopic = topic; + }, + 'unregister': function () { + if (currentTopic !== null) { + WSConnection.unsubscribe(currentTopic); + reset(); + } + }, + 'pushCallback': function (callback) { + callbackStack.push(callback); + } + } +});