@schoolbelle/common
Version:
Demo library to showcase Angular packaging format
168 lines (162 loc) • 13.1 kB
JavaScript
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+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuZW1pdCgndW5zdWJzY3JpYmUnLCByb29tKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGdldE9ic2VydmFibGUoZXZlbnQpOiBPYnNlcnZhYmxlPFNvY2tldEV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdC5hc09ic2VydmFibGUoKS5maWx0ZXIoZGF0YSA9PiBkYXRhLmV2ZW50ID09PSBldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi9zb2NrZXQuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBTb2NrZXRTZXJ2aWNlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBTb2NrZXRTZXJ2aWNlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbU29ja2V0U2VydmljZV1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7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