UNPKG

@hsaadawy/ngx-chat

Version:
49 lines 7.86 kB
import { __awaiter } from "tslib"; import { xml } from '@xmpp/client'; import { filter } from 'rxjs/operators'; import { timeout } from '../../../../core/utils-timeout'; import { AbstractXmppPlugin } from './abstract-xmpp-plugin'; /** * XEP-0199 XMPP Ping (https://xmpp.org/extensions/xep-0199.html) */ export class PingPlugin extends AbstractXmppPlugin { constructor(xmppChatAdapter, logService, ngZone) { super(); this.xmppChatAdapter = xmppChatAdapter; this.logService = logService; this.ngZone = ngZone; this.pingInterval = 60000; this.xmppChatAdapter.state$.pipe(filter(newState => newState === 'online')).subscribe(() => this.schedulePings()); this.xmppChatAdapter.state$.pipe(filter(newState => newState === 'disconnected')).subscribe(() => this.unschedulePings()); } schedulePings() { this.unschedulePings(); this.ngZone.runOutsideAngular(() => { this.timeoutHandle = window.setInterval(() => this.ping(), this.pingInterval); }); } ping() { return __awaiter(this, void 0, void 0, function* () { this.logService.debug('ping...'); try { yield timeout(this.sendPing(), 10000); this.logService.debug('... pong'); } catch (_a) { if (this.xmppChatAdapter.state$.getValue() === 'online' && this.xmppChatAdapter.chatConnectionService.state$.getValue() === 'online') { this.logService.error('... pong errored, connection should be online, waiting for browser websocket timeout'); } } }); } sendPing() { return __awaiter(this, void 0, void 0, function* () { return yield this.xmppChatAdapter.chatConnectionService.sendIq(xml('iq', { type: 'get' }, xml('ping', { xmlns: 'urn:xmpp:ping' }))); }); } unschedulePings() { window.clearInterval(this.timeoutHandle); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluZy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXp6bmV0d29yay9uZ3gtY2hhdC9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9waW5nLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxrQkFBa0I7SUFLOUMsWUFDcUIsZUFBZ0MsRUFDaEMsVUFBc0IsRUFDdEIsTUFBYztRQUUvQixLQUFLLEVBQUUsQ0FBQztRQUpTLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFMbEIsaUJBQVksR0FBRyxLQUFNLENBQUM7UUFTbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQzVDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQyxDQUNsRCxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRWEsSUFBSTs7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxJQUFJO2dCQUNBLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFNLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDckM7WUFBQyxXQUFNO2dCQUNKLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUTt1QkFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFO29CQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO2lCQUNsSDthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRWEsUUFBUTs7WUFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUMxRCxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxFQUNuQixHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQ3hDLENBQ0osQ0FBQztRQUNOLENBQUM7S0FBQTtJQUVPLGVBQWU7UUFDbkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHhtbCB9IGZyb20gJ0B4bXBwL2NsaWVudCc7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgdGltZW91dCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMtdGltZW91dCc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcclxuaW1wb3J0IHsgSXFSZXNwb25zZVN0YW56YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc3RhbnphJztcclxuXHJcbi8qKlxyXG4gKiBYRVAtMDE5OSBYTVBQIFBpbmcgKGh0dHBzOi8veG1wcC5vcmcvZXh0ZW5zaW9ucy94ZXAtMDE5OS5odG1sKVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBpbmdQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFhtcHBQbHVnaW4ge1xyXG5cclxuICAgIHByaXZhdGUgdGltZW91dEhhbmRsZTogYW55O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwaW5nSW50ZXJ2YWwgPSA2MF8wMDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB4bXBwQ2hhdEFkYXB0ZXI6IFhtcHBDaGF0QWRhcHRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMueG1wcENoYXRBZGFwdGVyLnN0YXRlJC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIobmV3U3RhdGUgPT4gbmV3U3RhdGUgPT09ICdvbmxpbmUnKSxcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNjaGVkdWxlUGluZ3MoKSk7XHJcblxyXG4gICAgICAgIHRoaXMueG1wcENoYXRBZGFwdGVyLnN0YXRlJC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIobmV3U3RhdGUgPT4gbmV3U3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnKSxcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuc2NoZWR1bGVQaW5ncygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNjaGVkdWxlUGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51bnNjaGVkdWxlUGluZ3MoKTtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZW91dEhhbmRsZSA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnBpbmcoKSwgdGhpcy5waW5nSW50ZXJ2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZGVidWcoJ3BpbmcuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aW1lb3V0KHRoaXMuc2VuZFBpbmcoKSwgMTBfMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmRlYnVnKCcuLi4gcG9uZycpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBpZiAodGhpcy54bXBwQ2hhdEFkYXB0ZXIuc3RhdGUkLmdldFZhbHVlKCkgPT09ICdvbmxpbmUnXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnhtcHBDaGF0QWRhcHRlci5jaGF0Q29ubmVjdGlvblNlcnZpY2Uuc3RhdGUkLmdldFZhbHVlKCkgPT09ICdvbmxpbmUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJy4uLiBwb25nIGVycm9yZWQsICBjb25uZWN0aW9uIHNob3VsZCBiZSBvbmxpbmUsIHdhaXRpbmcgZm9yIGJyb3dzZXIgd2Vic29ja2V0IHRpbWVvdXQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNlbmRQaW5nKCk6IFByb21pc2U8SXFSZXNwb25zZVN0YW56YTwncmVzdWx0Jz4+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy54bXBwQ2hhdEFkYXB0ZXIuY2hhdENvbm5lY3Rpb25TZXJ2aWNlLnNlbmRJcShcclxuICAgICAgICAgICAgeG1sKCdpcScsIHt0eXBlOiAnZ2V0J30sXHJcbiAgICAgICAgICAgICAgICB4bWwoJ3BpbmcnLCB7eG1sbnM6ICd1cm46eG1wcDpwaW5nJ30pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW5zY2hlZHVsZVBpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudGltZW91dEhhbmRsZSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==