diff --git a/receivers/common/web/TcpListenerService.ts b/receivers/common/web/TcpListenerService.ts index 28d17a4..90cb655 100644 --- a/receivers/common/web/TcpListenerService.ts +++ b/receivers/common/web/TcpListenerService.ts @@ -70,7 +70,6 @@ export class TcpListenerService { heartbeatRetries += 1; session.send(Opcode.Ping); - this.emitter.emit('ping', { id: connectionId }); } catch (e) { Main.logger.warn(`Error while pinging sender device ${socket.remoteAddress}:${socket.remotePort}.`, e); socket.destroy(); @@ -98,9 +97,16 @@ export class TcpListenerService { this.sessions.splice(index, 1); } this.emitter.emit('disconnect', { id: connectionId, type: 'tcp', data: { address: socket.remoteAddress, port: socket.remotePort }}); + this.emitter.removeListener('ping', pingListener); }); this.emitter.emit('connect', { id: connectionId, type: 'tcp', data: { address: socket.remoteAddress, port: socket.remotePort }}); + const pingListener = (message: any) => { + if (!message) { + this.emitter.emit('ping', { id: connectionId }); + } + } + this.emitter.prependListener('ping', pingListener); try { Main.logger.info('Sending version'); diff --git a/receivers/common/web/WebSocketListenerService.ts b/receivers/common/web/WebSocketListenerService.ts index 425c0bd..c90ac7d 100644 --- a/receivers/common/web/WebSocketListenerService.ts +++ b/receivers/common/web/WebSocketListenerService.ts @@ -68,7 +68,6 @@ export class WebSocketListenerService { heartbeatRetries += 1; session.send(Opcode.Ping); - this.emitter.emit('ping', { id: connectionId }); } catch (e) { Main.logger.warn(`Error while pinging sender device ${socket.remoteAddress}:${socket.remotePort}.`, e); socket.destroy(); @@ -102,9 +101,16 @@ export class WebSocketListenerService { this.sessions.splice(index, 1); } this.emitter.emit('disconnect', { id: connectionId, type: 'ws', data: { url: socket.url() }}); + this.emitter.removeListener('ping', pingListener); }); this.emitter.emit('connect', { id: connectionId, type: 'ws', data: { url: socket.url() }}); + const pingListener = (message: any) => { + if (!message) { + this.emitter.emit('ping', { id: connectionId }); + } + } + this.emitter.prependListener('ping', pingListener); try { Main.logger.info('Sending version'); diff --git a/receivers/common/web/main/Renderer.ts b/receivers/common/web/main/Renderer.ts index db3f64b..bc5451e 100644 --- a/receivers/common/web/main/Renderer.ts +++ b/receivers/common/web/main/Renderer.ts @@ -10,7 +10,7 @@ let connections = []; // Window might be re-created while devices are still connected window.targetAPI.onPing((_event, value: any) => { - if (connections.length === 0) { + if (value && connections.length === 0) { connections.push(value.id); onConnect(value.id); }