UNPKG

@schoolbelle/common

Version:

Demo library to showcase Angular packaging format

168 lines (162 loc) 13.1 kB
import { Injectable, Inject, NgZone, NgModule } from '@angular/core'; import { SOCKET_SERVER_HOST } from '@schoolbelle/common/tokens'; import { Subject } from 'rxjs'; import io from 'socket.io-client'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ class SocketService { /** * @param {?} ngZone * @param {?} socketHost */ constructor(ngZone, socketHost) { 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', () => { console.log('connected as ' + this.socket.id); this.listeners.forEach(listener => { this.listen(listener.event, listener.timeout); }); }); // }); } /** * @param {?=} force * @return {?} */ connect(force = false) { console.log('socket will connect.'); return new Promise((resolve, reject) => { this.ngZone.runOutsideAngular(() => { if (this.socket.connected && force === true) { this.socket.close(); } if (!this.socket.connected) { this.socket.open(); this.socket.once('connect', () => resolve(true)); } else { resolve(true); } }); }); } /** * @param {?} event * @param {?=} timeout * @return {?} */ timeout(event, timeout = undefined) { if (typeof timeout !== 'number') return; return setTimeout(() => { this.unlisten(event); }, timeout); // cancel this subscription in timeout seconds } /** * @param {?} event * @param {?=} timeout * @return {?} */ listen(event, timeout = undefined) { // this.ngZone.runOutsideAngular(() => { if (this.listeners.get(event)) return; let /** @type {?} */ onGoingTimeout; if (typeof this.timeout === 'number') onGoingTimeout = this.timeout(event, timeout); this.connect().then(() => { this.socket.on(event, data => { if (onGoingTimeout) clearTimeout(onGoingTimeout); // if something is emitted, reset the timeout unsubscription. onGoingTimeout = this.timeout(event, timeout); // this.ngZone.run(() => { this.subject.next({ event: event, data: data }); // }); }); this.listeners.set(event, { event: event, timeout: timeout }); }); // }); } /** * @param {?} event * @return {?} */ unlisten(event) { if (!this.listeners.get(event)) return; this.listeners.delete(event); this.socket.off(event); } /** * @param {?} room * @return {?} */ join(room) { this.ngZone.runOutsideAngular(() => { this.connect().then(() => { this.socket.emit('subscribe', room); }); }); } /** * @param {?} room * @return {?} */ leave(room) { this.ngZone.runOutsideAngular(() => { this.connect().then(() => { this.socket.emit('unsubscribe', room); }); }); } /** * @param {?} event * @return {?} */ getObservable(event) { return this.subject.asObservable().filter(data => data.event === event); } } SocketService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ SocketService.ctorParameters = () => [ { type: NgZone, }, { type: undefined, decorators: [{ type: Inject, args: [SOCKET_SERVER_HOST,] },] }, ]; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ class SocketServiceModule { /** * @return {?} */ static forRoot() { return { ngModule: SocketServiceModule, providers: [SocketService] }; } } SocketServiceModule.decorators = [ { type: NgModule, args: [{},] }, ]; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export { SocketServiceModule, SocketService }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLXNlcnZpY2VzLXNvY2tldC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9zZXJ2aWNlcy9zb2NrZXQvc29ja2V0LnNlcnZpY2UudHMiLCJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvc29ja2V0L3NvY2tldC1zZXJ2aWNlLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU09DS0VUX1NFUlZFUl9IT1NUIH0gZnJvbSAnQHNjaG9vbGJlbGxlL2NvbW1vbi90b2tlbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGlvIGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuXG5leHBvcnQgdHlwZSBTb2NrZXRMaXN0ZW5lciA9IHsgZXZlbnQ6IHN0cmluZzsgdGltZW91dD86IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgU29ja2V0RXZlbnQgPSB7IGV2ZW50OiBzdHJpbmc7IGRhdGE6IGFueSB9O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU29ja2V0U2VydmljZSB7XG4gIHB1YmxpYyBzb2NrZXQ7XG4gIHByaXZhdGUgbGlzdGVuZXJzOiBNYXA8c3RyaW5nLCBTb2NrZXRMaXN0ZW5lcj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc3ViamVjdDogU3ViamVjdDxTb2NrZXRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSxcbiAgICBASW5qZWN0KFNPQ0tFVF9TRVJWRVJfSE9TVCkgcHJpdmF0ZSBzb2NrZXRIb3N0OiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgIHRoaXMuc29ja2V0ID0gaW8odGhpcy5zb2NrZXRIb3N0LCB7IGF1dG9Db25uZWN0OiBmYWxzZSB9KTtcbiAgICB0aGlzLnNvY2tldC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdjb25uZWN0ZWQgYXMgJyArIHRoaXMuc29ja2V0LmlkKTtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICB0aGlzLmxpc3RlbihsaXN0ZW5lci5ldmVudCwgbGlzdGVuZXIudGltZW91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyB9KTtcbiAgfVxuICBjb25uZWN0KGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdzb2NrZXQgd2lsbCBjb25uZWN0LicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldC5jb25uZWN0ZWQgJiYgZm9yY2UgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQub3BlbigpO1xuICAgICAgICAgIHRoaXMuc29ja2V0Lm9uY2UoJ2Nvbm5lY3QnLCAoKSA9PiByZXNvbHZlKHRydWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHRpbWVvdXQoZXZlbnQsIHRpbWVvdXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSByZXR1cm47XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51bmxpc3RlbihldmVudCk7XG4gICAgfSwgdGltZW91dCk7IC8vIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbiBpbiB0aW1lb3V0IHNlY29uZHNcbiAgfVxuICBwdWJsaWMgbGlzdGVuKGV2ZW50LCB0aW1lb3V0OiBudW1iZXIgPSB1bmRlZmluZWQpIHtcbiAgICAvLyB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmdldChldmVudCkpIHJldHVybjtcbiAgICBsZXQgb25Hb2luZ1RpbWVvdXQ7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnRpbWVvdXQgPT09ICdudW1iZXInKVxuICAgICAgb25Hb2luZ1RpbWVvdXQgPSB0aGlzLnRpbWVvdXQoZXZlbnQsIHRpbWVvdXQpO1xuICAgIHRoaXMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXQub24oZXZlbnQsIGRhdGEgPT4ge1xuICAgICAgICBpZiAob25Hb2luZ1RpbWVvdXQpIGNsZWFyVGltZW91dChvbkdvaW5nVGltZW91dCk7IC8vIGlmIHNvbWV0aGluZyBpcyBlbWl0dGVkLCByZXNldCB0aGUgdGltZW91dCB1bnN1YnNjcmlwdGlvbi5cbiAgICAgICAgb25Hb2luZ1RpbWVvdXQgPSB0aGlzLnRpbWVvdXQoZXZlbnQsIHRpbWVvdXQpO1xuICAgICAgICAvLyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YmplY3QubmV4dCh7IGV2ZW50OiBldmVudCwgZGF0YTogZGF0YSB9KTtcbiAgICAgICAgLy8gfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgeyBldmVudDogZXZlbnQsIHRpbWVvdXQ6IHRpbWVvdXQgfSk7XG4gICAgfSk7XG4gICAgLy8gfSk7XG4gIH1cbiAgcHVibGljIHVubGlzdGVuKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpKSByZXR1cm47XG4gICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGV2ZW50KTtcbiAgICB0aGlzLnNvY2tldC5vZmYoZXZlbnQpO1xuICB9XG4gIHB1YmxpYyBqb2luKHJvb206IHN0cmluZykge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5lbWl0KCdzdWJzY3JpYmUnLCByb29tKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBsZWF2ZShyb29tOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuZW1pdCgndW5zdWJzY3JpYmUnLCByb29tKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGdldE9ic2VydmFibGUoZXZlbnQpOiBPYnNlcnZhYmxlPFNvY2tldEV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdC5hc09ic2VydmFibGUoKS5maWx0ZXIoZGF0YSA9PiBkYXRhLmV2ZW50ID09PSBldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi9zb2NrZXQuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBTb2NrZXRTZXJ2aWNlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBTb2NrZXRTZXJ2aWNlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbU29ja2V0U2VydmljZV1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7O0lBY0UsWUFDUyxRQUM2QjtRQUQ3QixXQUFNLEdBQU4sTUFBTTtRQUN1QixlQUFVLEdBQVYsVUFBVTt5QkFMQyxJQUFJLEdBQUcsRUFBRTt1QkFDbEIsSUFBSSxPQUFPLEVBQUU7O1FBT25ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9DLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQzs7S0FFSjs7Ozs7SUFDRCxPQUFPLENBQUMsUUFBaUIsS0FBSztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtvQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO29CQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNmO2FBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0tBQ0o7Ozs7OztJQUNPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLFNBQVM7UUFDeEMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTztRQUN4QyxPQUFPLFVBQVUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCLEVBQUUsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7SUFFUCxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQWtCLFNBQVM7O1FBRTlDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN0QyxxQkFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUNsQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSTtnQkFDeEIsSUFBSSxjQUFjO29CQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztnQkFFOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzthQUVqRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQy9ELENBQUMsQ0FBQzs7Ozs7OztJQUdFLFFBQVEsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7Ozs7SUFFbEIsSUFBSSxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckMsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Ozs7SUFFRSxLQUFLLENBQUMsSUFBWTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2QyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7Ozs7OztJQUVMLGFBQWEsQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7S0FDekU7OztZQWpGRixVQUFVOzs7O1lBUmtCLE1BQU07NENBZ0I5QixNQUFNLFNBQUMsa0JBQWtCOzs7Ozs7O0FDaEI5Qjs7OztJQUtFLE9BQU8sT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUMzQixDQUFDO0tBQ0g7OztZQVBGLFFBQVEsU0FBQyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7In0=