Skip to content
This repository was archived by the owner on Mar 1, 2024. It is now read-only.

Commit 1e05186

Browse files
Merge pull request #419 from mcottontensor/fix_reconnect_flow
Rewriting a bunch of reconnect and disconnect handling.
2 parents 5cffec3 + 458e8aa commit 1e05186

File tree

6 files changed

+171
-204
lines changed

6 files changed

+171
-204
lines changed

Frontend/library/src/PixelStreaming/PixelStreaming.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ describe('PixelStreaming', () => {
274274
type: MessageRecvTypes.STREAMER_LIST,
275275
ids: streamerIdList
276276
}),
277-
autoSelectedStreamerId: streamerId
277+
autoSelectedStreamerId: streamerId,
278+
wantedStreamerId: null
278279
}));
279280
expect(webSocketSpyFunctions.sendSpy).toHaveBeenCalledWith(
280281
expect.stringMatching(/"type":"subscribe".*MOCK_PIXEL_STREAMING/)
@@ -298,7 +299,8 @@ describe('PixelStreaming', () => {
298299
type: MessageRecvTypes.STREAMER_LIST,
299300
ids: extendedStreamerIdList
300301
}),
301-
autoSelectedStreamerId: null
302+
autoSelectedStreamerId: null,
303+
wantedStreamerId: null
302304
}));
303305
expect(webSocketSpyFunctions.sendSpy).not.toHaveBeenCalledWith(
304306
expect.stringMatching(/"type":"subscribe"/)

Frontend/library/src/PixelStreaming/PixelStreaming.ts

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ export class PixelStreaming {
7070

7171
private _videoElementParent: HTMLElement;
7272

73-
_showActionOrErrorOnDisconnect = true;
7473
private allowConsoleCommands = false;
7574

7675
private onScreenKeyboardHelper: OnScreenKeyboard;
@@ -353,7 +352,7 @@ export class PixelStreaming {
353352
*/
354353
public reconnect() {
355354
this._eventEmitter.dispatchEvent(new StreamReconnectEvent());
356-
this._webRtcController.restartStreamAutomatically();
355+
this._webRtcController.tryReconnect("Reconnecting...");
357356
}
358357

359358
/**
@@ -440,7 +439,6 @@ export class PixelStreaming {
440439
*/
441440
_onWebRtcAutoConnect() {
442441
this._eventEmitter.dispatchEvent(new WebRtcAutoConnectEvent());
443-
this._showActionOrErrorOnDisconnect = true;
444442
}
445443

446444
/**
@@ -460,30 +458,16 @@ export class PixelStreaming {
460458
/**
461459
* Event fired when the video is disconnected - emits given eventString or an override
462460
* message from webRtcController if one has been set
463-
* @param eventString - the event text that will be emitted
464-
*/
465-
_onDisconnect(eventString: string) {
466-
// if we have overridden the default disconnection message, assign the new value here
467-
if (
468-
this._webRtcController.getDisconnectMessageOverride() != '' &&
469-
this._webRtcController.getDisconnectMessageOverride() !==
470-
undefined &&
471-
this._webRtcController.getDisconnectMessageOverride() != null
472-
) {
473-
eventString = this._webRtcController.getDisconnectMessageOverride();
474-
this._webRtcController.setDisconnectMessageOverride('');
475-
}
476-
461+
* @param eventString - a string describing why the connection closed
462+
* @param allowClickToReconnect - true if we want to allow the user to retry the connection with a click
463+
*/
464+
_onDisconnect(eventString: string, allowClickToReconnect: boolean) {
477465
this._eventEmitter.dispatchEvent(
478466
new WebRtcDisconnectedEvent({
479-
eventString,
480-
showActionOrErrorOnDisconnect:
481-
this._showActionOrErrorOnDisconnect
467+
eventString: eventString,
468+
allowClickToReconnect: allowClickToReconnect
482469
})
483470
);
484-
if (this._showActionOrErrorOnDisconnect == false) {
485-
this._showActionOrErrorOnDisconnect = true;
486-
}
487471
}
488472

489473
/**
@@ -856,4 +840,8 @@ export class PixelStreaming {
856840
public get toStreamerHandlers() {
857841
return this._webRtcController.streamMessageController.toStreamerHandlers;
858842
}
843+
844+
public isReconnecting() {
845+
return this._webRtcController.isReconnecting;
846+
}
859847
}

Frontend/library/src/Util/EventEmitter.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export class WebRtcDisconnectedEvent extends Event {
144144
/** Message describing the disconnect reason */
145145
eventString: string;
146146
/** true if the user is able to reconnect, false if disconnected because of unrecoverable reasons like not able to connect to the signaling server */
147-
showActionOrErrorOnDisconnect: boolean;
147+
allowClickToReconnect: boolean;
148148
};
149149
constructor(data: WebRtcDisconnectedEvent['data']) {
150150
super('webRtcDisconnected');
@@ -347,7 +347,9 @@ export class StreamerListMessageEvent extends Event {
347347
/** Streamer list message containing an array of streamer ids */
348348
messageStreamerList: MessageStreamerList;
349349
/** Auto-selected streamer from the list, or null if unable to auto-select and user should be prompted to select */
350-
autoSelectedStreamerId: string | null;
350+
autoSelectedStreamerId: string;
351+
/** Wanted streamer id from various configurations. */
352+
wantedStreamerId: string;
351353
};
352354
constructor(data: StreamerListMessageEvent['data']) {
353355
super('streamerListMessage');

0 commit comments

Comments
 (0)