ng2-signalr
Version:
angular2 signalr library
237 lines • 8.28 kB
JavaScript
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