UNPKG

ng2-signalr

Version:
237 lines 8.28 kB
import { BroadcastEventListener } from '../eventing/broadcast.event.listener'; import { ConnectionStatus } from './connection.status'; import { Subject } from 'rxjs/Subject'; export var SignalRConnection = (function () { /** * @param {?} jConnection * @param {?} jProxy * @param {?} zone * @param {?} configuration */ function SignalRConnection(jConnection, jProxy, zone, configuration) { this._jProxy = jProxy; this._jConnection = jConnection; this._zone = zone; this._errors = this.wireUpErrorsAsObservable(); this._status = this.wireUpStatusEventsAsObservable(); this._configuration = configuration; } Object.defineProperty(SignalRConnection.prototype, "errors", { /** * @return {?} */ get: function () { return this._errors; }, enumerable: true, configurable: true }); Object.defineProperty(SignalRConnection.prototype, "status", { /** * @return {?} */ get: function () { return this._status; }, enumerable: true, configurable: true }); /** * @return {?} */ SignalRConnection.prototype.start = function () { var _this = this; var /** @type {?} */ jTransports = this.convertTransports(this._configuration.transport); var /** @type {?} */ $promise = new Promise(function (resolve, reject) { _this._jConnection .start({ jsonp: _this._configuration.jsonp, transport: jTransports, withCredentials: _this._configuration.withCredentials, }) .done(function () { console.log('Connection established, ID: ' + _this._jConnection.id); console.log('Connection established, Transport: ' + _this._jConnection.transport.name); resolve(_this); }) .fail(function (error) { console.log('Could not connect'); reject('Failed to connect. Error: ' + error.message); // ex: Error during negotiation request. }); }); return $promise; }; /** * @return {?} */ SignalRConnection.prototype.stop = function () { this._jConnection.stop(); }; Object.defineProperty(SignalRConnection.prototype, "id", { /** * @return {?} */ get: function () { return this._jConnection.id; }, enumerable: true, configurable: true }); /** * @param {?} method * @param {...?} parameters * @return {?} */ SignalRConnection.prototype.invoke = function (method) { var _this = this; var parameters = []; for (var _i = 1; _i < arguments.length; _i++) { parameters[_i - 1] = arguments[_i]; } if (method == null) { throw new Error('SignalRConnection: Failed to invoke. Argument \'method\' can not be null'); } this.log("SignalRConnection. Start invoking '" + method + "'..."); var /** @type {?} */ $promise = new Promise(function (resolve, reject) { (_a = _this._jProxy).invoke.apply(_a, [method].concat(parameters)) .done(function (result) { _this.log("'" + method + "' invoked succesfully. Resolving promise..."); resolve(result); _this.log("Promise resolved."); }) .fail(function (err) { console.log("Invoking '" + method + "' failed. Rejecting promise..."); reject(err); console.log("Promise rejected."); }); var _a; }); return $promise; }; /** * @param {?} listener * @return {?} */ SignalRConnection.prototype.listen = function (listener) { var _this = this; if (listener == null) { throw new Error('Failed to listen. Argument \'listener\' can not be null'); } this.log("SignalRConnection: Starting to listen to server event with name " + listener.event); this._jProxy.on(listener.event, function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } _this._zone.run(function () { var /** @type {?} */ casted = null; if (args.length > 0) { casted = (args[0]); } ; _this.log('SignalRConnection.proxy.on invoked. Calling listener next() ...'); listener.next(casted); _this.log('listener next() called.'); }); }); }; /** * @param {?} event * @return {?} */ SignalRConnection.prototype.listenFor = function (event) { if (event == null || event === '') { throw new Error('Failed to listen. Argument \'event\' can not be empty'); } var /** @type {?} */ listener = new BroadcastEventListener(event); this.listen(listener); return listener; }; /** * @param {?} transports * @return {?} */ SignalRConnection.prototype.convertTransports = function (transports) { if (transports instanceof Array) { return transports.map(function (t) { return t.name; }); } return transports.name; }; /** * @return {?} */ SignalRConnection.prototype.wireUpErrorsAsObservable = function () { var /** @type {?} */ sError = new Subject(); this._jConnection.error(function (error) { //this._zone.run(() => { /*errors don't need to run in a zone*/ sError.next(error); //}); }); return sError; }; /** * @return {?} */ SignalRConnection.prototype.wireUpStatusEventsAsObservable = function () { var _this = this; var /** @type {?} */ sStatus = new Subject(); // aggregate all signalr connection status handlers into 1 observable. // handler wire up, for signalr connection status callback. this._jConnection.stateChanged(function (change) { _this._zone.run(function () { sStatus.next(new ConnectionStatus(change.newState)); }); }); return sStatus; }; /** * @param {?} listener * @param {...?} args * @return {?} */ SignalRConnection.prototype.onBroadcastEventReceived = function (listener) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } this.log('SignalRConnection.proxy.on invoked. Calling listener next() ...'); var /** @type {?} */ casted = null; if (args.length > 0) { casted = (args[0]); } this._zone.run(function () { listener.next(casted); }); this.log('listener next() called.'); }; /** * @param {...?} args * @return {?} */ SignalRConnection.prototype.log = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } if (this._jConnection.logging === false) { return; } console.log(args.join(', ')); }; return SignalRConnection; }()); function SignalRConnection_tsickle_Closure_declarations() { /** @type {?} */ SignalRConnection.prototype._status; /** @type {?} */ SignalRConnection.prototype._errors; /** @type {?} */ SignalRConnection.prototype._jConnection; /** @type {?} */ SignalRConnection.prototype._jProxy; /** @type {?} */ SignalRConnection.prototype._zone; /** @type {?} */ SignalRConnection.prototype._configuration; } //# sourceMappingURL=signalr.connection.js.map