UNPKG

@pazznetwork/ngx-chat

Version:

[![Build status](https://api.travis-ci.com/pazznetwork/ngx-chat.svg?branch=master)](https://travis-ci.com/pazznetwork/ngx-chat) [![Coverage](https://coveralls.io/repos/github/pazznetwork/ngx-chat/badge.svg?branch=master)](https://coveralls.io/github/pazzn

44 lines 7.37 kB
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); }); } async ping() { this.logService.debug('ping...'); try { await timeout(this.sendPing(), 10000); this.logService.debug('... pong'); } catch { 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'); } } } async sendPing() { return await this.xmppChatAdapter.chatConnectionService.sendIq(xml('iq', { type: 'get' }, xml('ping', { xmlns: 'urn:xmpp:ping' }))); } unschedulePings() { window.clearInterval(this.timeoutHandle); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluZy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9waW5nLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLGtCQUFrQjtJQUs5QyxZQUNxQixlQUFnQyxFQUNoQyxVQUFzQixFQUN0QixNQUFjO1FBRS9CLEtBQUssRUFBRSxDQUFDO1FBSlMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUxsQixpQkFBWSxHQUFHLEtBQU0sQ0FBQztRQVNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FDNUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLENBQ2xELENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSTtRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUk7WUFDQSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBTSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFBQyxNQUFNO1lBQ0osSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRO21CQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLHVGQUF1RixDQUFDLENBQUM7YUFDbEg7U0FDSjtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUTtRQUNsQixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQzFELEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLEVBQ25CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FDeEMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWU7UUFDbkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB4bWwgfSBmcm9tICdAeG1wcC9jbGllbnQnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGltZW91dCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMtdGltZW91dCc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgWG1wcENoYXRBZGFwdGVyIH0gZnJvbSAnLi4veG1wcC1jaGF0LWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcbmltcG9ydCB7IElxUmVzcG9uc2VTdGFuemEgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0YW56YSc7XG5cbi8qKlxuICogWEVQLTAxOTkgWE1QUCBQaW5nIChodHRwczovL3htcHAub3JnL2V4dGVuc2lvbnMveGVwLTAxOTkuaHRtbClcbiAqL1xuZXhwb3J0IGNsYXNzIFBpbmdQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFhtcHBQbHVnaW4ge1xuXG4gICAgcHJpdmF0ZSB0aW1lb3V0SGFuZGxlOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwaW5nSW50ZXJ2YWwgPSA2MF8wMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB4bXBwQ2hhdEFkYXB0ZXI6IFhtcHBDaGF0QWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMueG1wcENoYXRBZGFwdGVyLnN0YXRlJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKG5ld1N0YXRlID0+IG5ld1N0YXRlID09PSAnb25saW5lJyksXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2NoZWR1bGVQaW5ncygpKTtcblxuICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihuZXdTdGF0ZSA9PiBuZXdTdGF0ZSA9PT0gJ2Rpc2Nvbm5lY3RlZCcpLFxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuc2NoZWR1bGVQaW5ncygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjaGVkdWxlUGluZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zY2hlZHVsZVBpbmdzKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dEhhbmRsZSA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnBpbmcoKSwgdGhpcy5waW5nSW50ZXJ2YWwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubG9nU2VydmljZS5kZWJ1ZygncGluZy4uLicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGltZW91dCh0aGlzLnNlbmRQaW5nKCksIDEwXzAwMCk7XG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZGVidWcoJy4uLiBwb25nJyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaWYgKHRoaXMueG1wcENoYXRBZGFwdGVyLnN0YXRlJC5nZXRWYWx1ZSgpID09PSAnb25saW5lJ1xuICAgICAgICAgICAgICAgICYmIHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS5zdGF0ZSQuZ2V0VmFsdWUoKSA9PT0gJ29ubGluZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJy4uLiBwb25nIGVycm9yZWQsICBjb25uZWN0aW9uIHNob3VsZCBiZSBvbmxpbmUsIHdhaXRpbmcgZm9yIGJyb3dzZXIgd2Vic29ja2V0IHRpbWVvdXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2VuZFBpbmcoKTogUHJvbWlzZTxJcVJlc3BvbnNlU3RhbnphPCdyZXN1bHQnPj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy54bXBwQ2hhdEFkYXB0ZXIuY2hhdENvbm5lY3Rpb25TZXJ2aWNlLnNlbmRJcShcbiAgICAgICAgICAgIHhtbCgnaXEnLCB7dHlwZTogJ2dldCd9LFxuICAgICAgICAgICAgICAgIHhtbCgncGluZycsIHt4bWxuczogJ3Vybjp4bXBwOnBpbmcnfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2NoZWR1bGVQaW5ncygpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50aW1lb3V0SGFuZGxlKTtcbiAgICB9XG5cbn1cbiJdfQ==