bmw-js
Version:
BMW javascript REST client for the BMW i3 hackathon.
131 lines (117 loc) • 4.8 kB
JavaScript
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.SignalRBrowserWrapper=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
// Generated by CoffeeScript 1.6.3
(function() {
var SignalRNodeWrapper,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
module.exports = SignalRNodeWrapper = (function() {
SignalRNodeWrapper.prototype.observer_callbacks = {};
SignalRNodeWrapper.prototype.observer_registry = function(entity) {
var callback, _i, _len, _ref, _results;
if (this.observer_callbacks[entity._id]) {
_ref = this.observer_callbacks[entity._id];
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
callback = _ref[_i];
_results.push(callback(entity));
}
return _results;
}
};
function SignalRNodeWrapper(url, hubs) {
this.observer_registry = __bind(this.observer_registry, this);
var hub, _i, _len;
this.signalr = $.hubConnection(url, {
useDefaultPath: false
});
this.hubs = {};
this.connectionStatus = {};
for (_i = 0, _len = hubs.length; _i < _len; _i++) {
hub = hubs[_i];
this.hubs[hub] = this.signalr.createHubProxy(hub);
this.reconnect(hub, function() {
return console.log("Connection made to " + hub);
});
}
}
SignalRNodeWrapper.prototype.reconnect = function(which, callback) {
if (this.hubs[which].connection.state !== 1) {
if ((this.connectionStatus[which] != null)) {
return this.connectionStatus[which].done(callback);
} else {
return this.connectionStatus[which] = this.hub[which].connection.start().done(callback);
}
}
};
SignalRNodeWrapper.prototype.getHub = function(which, callback) {
if (this.hubs[which] != null) {
return callback(null, this.hubs[which]);
} else {
this.hubs[which] = this.signalr.createHubProxy(which);
return this.reconnect(which, function(error, result) {
if (error != null) {
callback(error, null);
}
this.hubs[which].on("UpdateEntity", this.observer_registry);
return callback(null, this.hubs[which]);
});
}
};
SignalRNodeWrapper.prototype.setCallback = function(id, futureCallback) {
if (this.observer_callbacks[id] == null) {
this.observer_callbacks[id] = [];
}
this.observer_callbacks[id].push(futureCallback);
};
SignalRNodeWrapper.prototype.removeCallback = function(id, pastCallback) {
var callback, temp, _i, _len, _ref;
if (pastCallback === null) {
this.observer_callbacks[id] = [];
} else {
temp = [];
_ref = this.observer_callbacks[id];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
callback = _ref[_i];
if (callback !== pastCallback) {
temp.push(callback);
}
}
this.observer_callbacks[id] = temp;
}
};
SignalRNodeWrapper.prototype.subscribe = function(hubName, method, subject, object, futureCallback, callback) {
this.setCallback(subject, futureCallback);
return this.getHub(hubName, function(error, hub) {
if (error != null) {
callback(error, null);
}
if (hub != null) {
hub.invoke(method, object);
}
return callback(null, true);
});
};
SignalRNodeWrapper.prototype.unsubscribe = function(hubName, method, subject, object, pastCallback, callback) {
this.removeCallback(subject, pastCallback);
if (this.observer_callbacks[subject].length === 0) {
return this.getHub(hubName, function(error, hub) {
if (error != null) {
callback(error, null);
}
if (hub != null) {
hub.invoke(method, object);
}
return callback(null, true);
});
} else {
return callback(null, true);
}
};
return SignalRNodeWrapper;
})();
}).call(this);
/*
//@ sourceMappingURL=SignalRBrowserWrapper.map
*/
},{}]},{},[1])
(1)
});