diff --git a/.gitignore b/.gitignore index 1af2f6e..e2622bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .idea -.env \ No newline at end of file +.env +.env.development diff --git a/src/webrtc-signaling.ts b/src/webrtc-signaling.ts index ad504e1..310b513 100644 --- a/src/webrtc-signaling.ts +++ b/src/webrtc-signaling.ts @@ -85,10 +85,20 @@ async function handleDeviceSocketRequest( console.log( `[Device] Device ${device.id} already connected. Terminating existing connection.`, ); - activeConnections.get(device.id)?.[0]?.terminate(); - activeConnections.delete(device.id); - // We don't return here, we just delete the existing connection and let it continue and create a new one. - // Why multiple connections are needed, i don't know, but let's cover it. + + const [existingDeviceWs] = activeConnections.get(device.id)!; + await new Promise(resolve => { + console.log("[Device] Waiting for existing connection to close..."); + existingDeviceWs.on("close", () => { + activeConnections.delete(device.id); + console.log("[Device] Existing connection closed."); + + // Now we continue with the new connection + resolve(true); + }); + + existingDeviceWs.terminate(); + }); } // Complete the WebSocket upgrade