UNPKG

mojio-js-sdk

Version:

Mojio javascript REST client.

55 lines (46 loc) 1.92 kB
SignalR = require 'signalr-client' iSignalRWrapper = require '../helpers/iSignalRWrapper' SignalRRegistry = require '../interfaces/SignalRRegistry' # @nodoc module.exports = class SignalRNodeWrapper extends iSignalRWrapper registry = new SignalRRegistry() constructor: (@url, @hubNames, @options = {}) -> @available_hubs = hubNames @signalr = null super() getHub: (which, callback, retries = 10) -> @signalr ?= new SignalR.client(@url, @available_hubs, null) hub = registry.hubs[which] return callback(null, hub) if hub? if hub == @signalr.hub(which) hub.on 'error', (data) -> log data hub.on 'UpdateEntity', registry.observer_registry return callback null, hub else if retries-- > 0 _this = @ retry = () -> _this.getHub which, callback, retries setTimeout retry, 1000 else callback "Timed out.", null subscribe: (hubName, method, observerId, subject, futureCallback, callback) -> registry.setCallback(subject, futureCallback) @getHub(hubName, (error, hub) -> if error? callback(error, null) else hub.invoke(method, observerId) if hub? callback(null, hub) ) unsubscribe: (hubName, method, observerId, subject, pastCallback, callback) -> registry.removeCallback(subject, pastCallback) if (registry.observer_callbacks[subject].length == 0) @getHub(hubName, (error, hub) -> if error? callback(error, null) else hub.invoke(method, observerId) if hub? callback(null, hub) ) else callback(null, true)