@schoolbelle/common
Version:
Demo library to showcase Angular packaging format
193 lines (192 loc) • 14.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable, Inject, NgZone } from '@angular/core';
import { SOCKET_SERVER_HOST } from '@schoolbelle/common/tokens';
import { Subject } from 'rxjs';
import io from 'socket.io-client';
var SocketService = /** @class */ (function () {
function SocketService(ngZone, socketHost) {
var _this = this;
this.ngZone = ngZone;
this.socketHost = socketHost;
this.listeners = new Map();
this.subject = new Subject();
// this.ngZone.runOutsideAngular(() => {
this.socket = io(this.socketHost, { autoConnect: false });
this.socket.on('connect', function () {
console.log('connected as ' + _this.socket.id);
_this.listeners.forEach(function (listener) {
_this.listen(listener.event, listener.timeout);
});
});
// });
}
/**
* @param {?=} force
* @return {?}
*/
SocketService.prototype.connect = /**
* @param {?=} force
* @return {?}
*/
function (force) {
var _this = this;
if (force === void 0) { force = false; }
console.log('socket will connect.');
return new Promise(function (resolve, reject) {
_this.ngZone.runOutsideAngular(function () {
if (_this.socket.connected && force === true) {
_this.socket.close();
}
if (!_this.socket.connected) {
_this.socket.open();
_this.socket.once('connect', function () { return resolve(true); });
}
else {
resolve(true);
}
});
});
};
/**
* @param {?} event
* @param {?=} timeout
* @return {?}
*/
SocketService.prototype.timeout = /**
* @param {?} event
* @param {?=} timeout
* @return {?}
*/
function (event, timeout) {
var _this = this;
if (timeout === void 0) { timeout = undefined; }
if (typeof timeout !== 'number')
return;
return setTimeout(function () {
_this.unlisten(event);
}, timeout); // cancel this subscription in timeout seconds
};
/**
* @param {?} event
* @param {?=} timeout
* @return {?}
*/
SocketService.prototype.listen = /**
* @param {?} event
* @param {?=} timeout
* @return {?}
*/
function (event, timeout) {
var _this = this;
if (timeout === void 0) { timeout = undefined; }
// this.ngZone.runOutsideAngular(() => {
if (this.listeners.get(event))
return;
var /** @type {?} */ onGoingTimeout;
if (typeof this.timeout === 'number')
onGoingTimeout = this.timeout(event, timeout);
this.connect().then(function () {
_this.socket.on(event, function (data) {
if (onGoingTimeout)
clearTimeout(onGoingTimeout); // if something is emitted, reset the timeout unsubscription.
onGoingTimeout = _this.timeout(event, timeout);
// this.ngZone.run(() => {
// this.ngZone.run(() => {
_this.subject.next({ event: event, data: data });
// });
});
_this.listeners.set(event, { event: event, timeout: timeout });
});
// });
};
/**
* @param {?} event
* @return {?}
*/
SocketService.prototype.unlisten = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (!this.listeners.get(event))
return;
this.listeners.delete(event);
this.socket.off(event);
};
/**
* @param {?} room
* @return {?}
*/
SocketService.prototype.join = /**
* @param {?} room
* @return {?}
*/
function (room) {
var _this = this;
this.ngZone.runOutsideAngular(function () {
_this.connect().then(function () {
_this.socket.emit('subscribe', room);
});
});
};
/**
* @param {?} room
* @return {?}
*/
SocketService.prototype.leave = /**
* @param {?} room
* @return {?}
*/
function (room) {
var _this = this;
this.ngZone.runOutsideAngular(function () {
_this.connect().then(function () {
_this.socket.emit('unsubscribe', room);
});
});
};
/**
* @param {?} event
* @return {?}
*/
SocketService.prototype.getObservable = /**
* @param {?} event
* @return {?}
*/
function (event) {
return this.subject.asObservable().filter(function (data) { return data.event === event; });
};
SocketService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
SocketService.ctorParameters = function () { return [
{ type: NgZone, },
{ type: undefined, decorators: [{ type: Inject, args: [SOCKET_SERVER_HOST,] },] },
]; };
return SocketService;
}());
export { SocketService };
function SocketService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
SocketService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
SocketService.ctorParameters;
/** @type {?} */
SocketService.prototype.socket;
/** @type {?} */
SocketService.prototype.listeners;
/** @type {?} */
SocketService.prototype.subject;
/** @type {?} */
SocketService.prototype.ngZone;
/** @type {?} */
SocketService.prototype.socketHost;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2Nob29sYmVsbGUvY29tbW9uL3NlcnZpY2VzLyIsInNvdXJjZXMiOlsic29ja2V0L3NyYy9zb2NrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0lBV2hDLHVCQUNTLFFBQzZCO1FBRnRDLGlCQWFDO1FBWlEsV0FBTSxHQUFOLE1BQU07UUFDdUIsZUFBVSxHQUFWLFVBQVU7eUJBTEMsSUFBSSxHQUFHLEVBQUU7dUJBQ2xCLElBQUksT0FBTyxFQUFFOztRQU9uRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQSxRQUFRO2dCQUM3QixLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9DLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQzs7S0FFSjs7Ozs7SUFDRCwrQkFBTzs7OztJQUFQLFVBQVEsS0FBc0I7UUFBOUIsaUJBZUM7UUFmTyxzQkFBQSxFQUFBLGFBQXNCO1FBQzVCLE9BQU8sQ0FB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QUFDLGlCQUFpQixDQUFDO1lBQzVCLEtBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNyQyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7Ozs7OztJQUVFLDZCQUFLOzs7O2NBQUMsSUFBWTs7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QixLQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNsQixLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkMsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Ozs7SUFFTCxxQ0FBYTs7OztJQUFiLFVBQWMsS0FBSztRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDO0tBQ3pFOztnQkFqRkYsVUFBVTs7OztnQkFSa0IsTUFBTTtnREFnQjlCLE1BQU0sU0FBQyxrQkFBa0I7O3dCQWhCOUI7O1NBU2EsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTT0NLRVRfU0VSVkVSX0hPU1QgfSBmcm9tICdAc2Nob29sYmVsbGUvY29tbW9uL3Rva2Vucyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgaW8gZnJvbSAnc29ja2V0LmlvLWNsaWVudCc7XG5cbmV4cG9ydCB0eXBlIFNvY2tldExpc3RlbmVyID0geyBldmVudDogc3RyaW5nOyB0aW1lb3V0PzogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTb2NrZXRFdmVudCA9IHsgZXZlbnQ6IHN0cmluZzsgZGF0YTogYW55IH07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTb2NrZXRTZXJ2aWNlIHtcbiAgcHVibGljIHNvY2tldDtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIFNvY2tldExpc3RlbmVyPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBzdWJqZWN0OiBTdWJqZWN0PFNvY2tldEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5nWm9uZTogTmdab25lLFxuICAgIEBJbmplY3QoU09DS0VUX1NFUlZFUl9IT1NUKSBwcml2YXRlIHNvY2tldEhvc3Q6IHN0cmluZ1xuICApIHtcbiAgICAvLyB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgdGhpcy5zb2NrZXQgPSBpbyh0aGlzLnNvY2tldEhvc3QsIHsgYXV0b0Nvbm5lY3Q6IGZhbHNlIH0pO1xuICAgIHRoaXMuc29ja2V0Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2Nvbm5lY3RlZCBhcyAnICsgdGhpcy5zb2NrZXQuaWQpO1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICAgIHRoaXMubGlzdGVuKGxpc3RlbmVyLmV2ZW50LCBsaXN0ZW5lci50aW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIH0pO1xuICB9XG4gIGNvbm5lY3QoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ3NvY2tldCB3aWxsIGNvbm5lY3QuJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0LmNvbm5lY3RlZCAmJiBmb3JjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5vcGVuKCk7XG4gICAgICAgICAgdGhpcy5zb2NrZXQub25jZSgnY29ubmVjdCcsICgpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgdGltZW91dChldmVudCwgdGltZW91dCA9IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHJldHVybjtcbiAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVubGlzdGVuKGV2ZW50KTtcbiAgICB9LCB0aW1lb3V0KTsgLy8gY2FuY2VsIHRoaXMgc3Vic2NyaXB0aW9uIGluIHRpbWVvdXQgc2Vjb25kc1xuICB9XG4gIHB1YmxpYyBsaXN0ZW4oZXZlbnQsIHRpbWVvdXQ6IG51bWJlciA9IHVuZGVmaW5lZCkge1xuICAgIC8vIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KSkgcmV0dXJuO1xuICAgIGxldCBvbkdvaW5nVGltZW91dDtcbiAgICBpZiAodHlwZW9mIHRoaXMudGltZW91dCA9PT0gJ251bWJlcicpXG4gICAgICBvbkdvaW5nVGltZW91dCA9IHRoaXMudGltZW91dChldmVudCwgdGltZW91dCk7XG4gICAgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5vbihldmVudCwgZGF0YSA9PiB7XG4gICAgICAgIGlmIChvbkdvaW5nVGltZW91dCkgY2xlYXJUaW1lb3V0KG9uR29pbmdUaW1lb3V0KTsgLy8gaWYgc29tZXRoaW5nIGlzIGVtaXR0ZWQsIHJlc2V0IHRoZSB0aW1lb3V0IHVuc3Vic2NyaXB0aW9uLlxuICAgICAgICBvbkdvaW5nVGltZW91dCA9IHRoaXMudGltZW91dChldmVudCwgdGltZW91dCk7XG4gICAgICAgIC8vIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KHsgZXZlbnQ6IGV2ZW50LCBkYXRhOiBkYXRhIH0pO1xuICAgICAgICAvLyB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCB7IGV2ZW50OiBldmVudCwgdGltZW91dDogdGltZW91dCB9KTtcbiAgICB9KTtcbiAgICAvLyB9KTtcbiAgfVxuICBwdWJsaWMgdW5saXN0ZW4oZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmdldChldmVudCkpIHJldHVybjtcbiAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xuICAgIHRoaXMuc29ja2V0Lm9mZihldmVudCk7XG4gIH1cbiAgcHVibGljIGpvaW4ocm9vbTogc3RyaW5nKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc29ja2V0LmVtaXQoJ3N1YnNjcmliZScsIHJvb20pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGxlYXZlKHJvb206IHN0cmluZykge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5lbWl0KCd1bnN1YnNjcmliZScsIHJvb20pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0T2JzZXJ2YWJsZShldmVudCk6IE9ic2VydmFibGU8U29ja2V0RXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLmZpbHRlcihkYXRhID0+IGRhdGEuZXZlbnQgPT09IGV2ZW50KTtcbiAgfVxufVxuIl19