From 80d229041a5bc6ca7c7e30243af610175036d6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Tue, 23 Mar 2021 15:41:20 +0100 Subject: [PATCH] do not destroy WebRTC on WS disconnect. --- src/component/main.vue | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/component/main.vue b/src/component/main.vue index 041b5754..37a95d38 100644 --- a/src/component/main.vue +++ b/src/component/main.vue @@ -404,14 +404,16 @@ this.websocket.on('connected', () => { Vue.set(this.state.connection, 'websocket', 'connected') this.events.emit('connection.websocket', 'connected') - this.webrtcConnect() + + if (!this.watching) { + this.webrtcConnect() + } }) this.websocket.on('disconnected', () => { Vue.set(this.state.connection, 'websocket', 'disconnected') this.events.emit('connection.websocket', 'disconnected') - this.webrtc.disconnect() - this.clearState() + this.clearWebSocketState() }) // webrtc @@ -481,21 +483,17 @@ let webrtcReconnect: any this.webrtc.on('disconnected', () => { - Vue.set(this.state.connection.webrtc, 'status', 'disconnected') - Vue.set(this.state.connection.webrtc, 'stats', null) - Vue.set(this.state.connection.webrtc, 'video', null) - Vue.set(this.state.connection.webrtc, 'videos', []) - Vue.set(this.state.connection, 'type', 'none') this.events.emit('connection.webrtc', 'disconnected') + this.clearWebRTCState() - if (!this._video) return - - // destroy stream - if ('srcObject' in this._video) { - this._video.srcObject = null - } else { - // @ts-ignore - this._video.removeAttribute('src') + // destroy video + if (this._video) { + if ('srcObject' in this._video) { + this._video.srcObject = null + } else { + // @ts-ignore + this._video.removeAttribute('src') + } } // reconnect WebRTC @@ -581,8 +579,7 @@ } } - clearState() { - Vue.set(this.state.control, 'cursor', null) + clearWebSocketState() { Vue.set(this.state.control, 'clipboard', null) Vue.set(this.state.control, 'host_id', null) Vue.set(this.state.control, 'implicit_hosting', false) @@ -591,5 +588,13 @@ Vue.set(this.state, 'session_id', null) Vue.set(this.state, 'sessions', {}) } + + clearWebRTCState() { + Vue.set(this.state.connection.webrtc, 'status', 'disconnected') + Vue.set(this.state.connection.webrtc, 'stats', null) + Vue.set(this.state.connection.webrtc, 'video', null) + Vue.set(this.state.connection.webrtc, 'videos', []) + Vue.set(this.state.connection, 'type', 'none') + } }