Temp fix: newly joined clients miss the commands
When newly joined clients register for XMPP events upon CONFERENCE_JOINED, those events that is carried by presence (e.g. START_COMMAND) was already fired. Temporary solution is to let the client send a ping message after registering XMPP event listeners. The moderator will respond with pong, which forces the presence to be resent.
This commit is contained in:
parent
0f0f9ea1b2
commit
f8c01646c7
|
@ -21,6 +21,20 @@ const COMMAND_START = 'localRecStart';
|
||||||
*/
|
*/
|
||||||
const COMMAND_STOP = 'localRecStop';
|
const COMMAND_STOP = 'localRecStop';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One-time command used to trigger the moderator to resend the commands.
|
||||||
|
* This is a workaround for newly-joined clients to receive remote presence.
|
||||||
|
*/
|
||||||
|
const COMMAND_PING = 'localRecPing';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One-time command sent upon receiving a {@code COMMAND_PING}.
|
||||||
|
* Only the moderator sends this command.
|
||||||
|
* This command does not carry any information itself, but rather forces the
|
||||||
|
* XMPP server to resend the remote presence.
|
||||||
|
*/
|
||||||
|
const COMMAND_PONG = 'localRecPong';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Participant property key for local recording stats.
|
* Participant property key for local recording stats.
|
||||||
*/
|
*/
|
||||||
|
@ -167,6 +181,7 @@ class RecordingController {
|
||||||
this._updateStats = this._updateStats.bind(this);
|
this._updateStats = this._updateStats.bind(this);
|
||||||
this._onStartCommand = this._onStartCommand.bind(this);
|
this._onStartCommand = this._onStartCommand.bind(this);
|
||||||
this._onStopCommand = this._onStopCommand.bind(this);
|
this._onStopCommand = this._onStopCommand.bind(this);
|
||||||
|
this._onPingCommand = this._onPingCommand.bind(this);
|
||||||
this._doStartRecording = this._doStartRecording.bind(this);
|
this._doStartRecording = this._doStartRecording.bind(this);
|
||||||
this._doStopRecording = this._doStopRecording.bind(this);
|
this._doStopRecording = this._doStopRecording.bind(this);
|
||||||
this.registerEvents = this.registerEvents.bind(this);
|
this.registerEvents = this.registerEvents.bind(this);
|
||||||
|
@ -189,8 +204,13 @@ class RecordingController {
|
||||||
.addCommandListener(COMMAND_STOP, this._onStopCommand);
|
.addCommandListener(COMMAND_STOP, this._onStopCommand);
|
||||||
this._conference
|
this._conference
|
||||||
.addCommandListener(COMMAND_START, this._onStartCommand);
|
.addCommandListener(COMMAND_START, this._onStartCommand);
|
||||||
|
this._conference
|
||||||
|
.addCommandListener(COMMAND_PING, this._onPingCommand);
|
||||||
this._registered = true;
|
this._registered = true;
|
||||||
}
|
}
|
||||||
|
if (!this._conference.isModerator()) {
|
||||||
|
this._conference.sendCommandOnce(COMMAND_PING, {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +245,7 @@ class RecordingController {
|
||||||
*/
|
*/
|
||||||
stopRecording() {
|
stopRecording() {
|
||||||
if (this._conference) {
|
if (this._conference) {
|
||||||
if (this._conference.isModerator) {
|
if (this._conference.isModerator()) {
|
||||||
this._conference.removeCommand(COMMAND_START);
|
this._conference.removeCommand(COMMAND_START);
|
||||||
this._conference.sendCommand(COMMAND_STOP, {
|
this._conference.sendCommand(COMMAND_STOP, {
|
||||||
attributes: {
|
attributes: {
|
||||||
|
@ -409,6 +429,21 @@ class RecordingController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onPingCommand: () => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback function for XMPP event.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
_onPingCommand() {
|
||||||
|
if (this._conference.isModerator()) {
|
||||||
|
logger.log('Received ping, sending pong.');
|
||||||
|
this._conference.sendCommandOnce(COMMAND_PONG, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a token that can be used to distinguish each
|
* Generates a token that can be used to distinguish each
|
||||||
* recording session.
|
* recording session.
|
||||||
|
|
Loading…
Reference in New Issue