diff --git a/src/sdk/conference/client.js b/src/sdk/conference/client.js index 6237482a..94f30f9a 100644 --- a/src/sdk/conference/client.js +++ b/src/sdk/conference/client.js @@ -29,7 +29,7 @@ const SignalingState = { CONNECTED: 3, }; -const protocolVersion = '1.0'; +const protocolVersion = '1.0.1'; /* eslint-disable valid-jsdoc */ /** diff --git a/src/sdk/conference/signaling.js b/src/sdk/conference/signaling.js index 89a87d0f..1f7729d9 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,27 @@ 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')); } @@ -193,4 +216,12 @@ export class SioSignaling extends EventModule.EventDispatcher { clearTimeout(this._refreshReconnectionTicket); this._refreshReconnectionTicket = null; } + + _incrementMessageSequence() { + if (this._messageSequence === maxSequence) { + this._messageSequence = 0; + } else { + this._messageSequence++; + } + } }