diff --git a/src/sdk/conference/signaling.js b/src/sdk/conference/signaling.js index 26c01322..414251c4 100644 --- a/src/sdk/conference/signaling.js +++ b/src/sdk/conference/signaling.js @@ -11,6 +11,7 @@ import {Base64} from '../base/base64.js'; 'use strict'; const reconnectionAttempts = 10; +const maxSequence = 2147483647; // eslint-disable-next-line require-jsdoc function handleResponse(status, data, resolve, reject) { @@ -39,6 +40,7 @@ export class SioSignaling extends EventModule.EventDispatcher { this._reconnectTimes = 0; this._reconnectionTicket = null; this._refreshReconnectionTicket = null; + this._messageSequence = 0; } /** @@ -69,6 +71,7 @@ export class SioSignaling extends EventModule.EventDispatcher { data: data, }, })); + this._incrementMessageSequence(); }); }); this._socket.on('reconnecting', () => { @@ -102,7 +105,28 @@ export class SioSignaling extends EventModule.EventDispatcher { data) => { if (status === 'ok') { this._reconnectTimes = 0; - this._onReconnectionTicket(data); + if (typeof data === 'object') { + if (Array.isArray(data.messages)) { + let isMissingStart = false; + for (const msg of data.messages) { + if (isMissingStart) { + this.dispatchEvent( + new EventModule.MessageEvent('data', { + message: { + notification: msg.event, + data: msg.data, + }, + })); + this._incrementMessageSequence(); + } else if (msg.seq === this._messageSequence) { + isMissingStart = true; + } + } + } + this._onReconnectionTicket(data.ticket); + } else { + this._onReconnectionTicket(data); + } } else { this.dispatchEvent(new EventModule.OwtEvent('disconnect')); } @@ -201,4 +225,19 @@ export class SioSignaling extends EventModule.EventDispatcher { clearTimeout(this._refreshReconnectionTicket); this._refreshReconnectionTicket = null; } + + /** + * @function _clearReconnectionTask + * @instance + * @desc Increase the message sequence. + * @memberof Owt.Conference.SioSignaling + * @private. + */ + _incrementMessageSequence() { + if (this._messageSequence === maxSequence) { + this._messageSequence = 0; + } else { + this._messageSequence++; + } + } }