mojio-js-sdk
Version:
Mojio javascript REST client.
70 lines (62 loc) • 2.6 kB
text/coffeescript
# assume's JQuery javascript client (bower install jquery).
iSignalRWrapper = require './iSignalRWrapper'
SignalRRegistry = require './SignalRRegistry'
module.exports = class SignalRBrowserWrapper extends iSignalRWrapper
registry = new SignalRRegistry()
constructor: (@url, @hubNames, jquery) -> # hubNames not used.
@$ = jquery
@available_hubs = hubNames
@signalr = null
@connectionStatus = false
super()
getHub: (which, callback) ->
if (registry.hubs[which])
callback(null, registry.hubs[which])
else
if (!@signalr?)
@signalr = @$.hubConnection(@url, { useDefaultPath: false })
@signalr.error( (error) ->
console.log("Connection error"+error)
callback(error, null)
)
registry.hubs[which] = @signalr.createHubProxy(which)
hub = registry.hubs[which]
hub.on("error", (data) ->
console.log("Hub '"+which+"' has error"+data)
)
hub.on("UpdateEntity", registry.observer_registry)
if (hub.connection.stateMachine != 1)
if (!@connectionStatus)
@signalr.start().done( () =>
@connectionStatus = true
hub.connection.start().done( () =>
callback(null, hub)
)
)
else
hub.connection.start().done( () =>
callback(null, hub)
)
else
callback(null, hub)
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)