From e32a265836bfd59d4e3e11c5711c11612913f903 Mon Sep 17 00:00:00 2001 From: Siyuan Miao Date: Fri, 12 Sep 2025 12:48:34 +0200 Subject: [PATCH] fix: handshake won't happen if webrtc reconnects --- hidrpc.go | 5 ++++- ui/src/hooks/stores.ts | 4 ++-- ui/src/hooks/useHidRpc.ts | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/hidrpc.go b/hidrpc.go index 8233e0f4..a81e115a 100644 --- a/hidrpc.go +++ b/hidrpc.go @@ -134,7 +134,10 @@ func reportHidRPC(params any, session *Session) { } if !session.hidRPCAvailable || session.HidChannel == nil { - logger.Warn().Msg("HID RPC is not available, skipping reportHidRPC") + logger.Warn(). + Bool("hidRPCAvailable", session.hidRPCAvailable). + Bool("HidChannel", session.HidChannel != nil). + Msg("HID RPC is not available, skipping reportHidRPC") return } diff --git a/ui/src/hooks/stores.ts b/ui/src/hooks/stores.ts index b6eebfc0..bfbbb26e 100644 --- a/ui/src/hooks/stores.ts +++ b/ui/src/hooks/stores.ts @@ -109,7 +109,7 @@ export interface RTCState { setHidRpcDisabled: (disabled: boolean) => void; rpcHidProtocolVersion: number | null; - setRpcHidProtocolVersion: (version: number) => void; + setRpcHidProtocolVersion: (version: number | null) => void; rpcHidChannel: RTCDataChannel | null; setRpcHidChannel: (channel: RTCDataChannel) => void; @@ -170,7 +170,7 @@ export const useRTCStore = create(set => ({ setHidRpcDisabled: (disabled: boolean) => set({ hidRpcDisabled: disabled }), rpcHidProtocolVersion: null, - setRpcHidProtocolVersion: (version: number) => set({ rpcHidProtocolVersion: version }), + setRpcHidProtocolVersion: (version: number | null) => set({ rpcHidProtocolVersion: version }), rpcHidChannel: null, setRpcHidChannel: (channel: RTCDataChannel) => set({ rpcHidChannel: channel }), diff --git a/ui/src/hooks/useHidRpc.ts b/ui/src/hooks/useHidRpc.ts index 6f75c5ae..57a54e96 100644 --- a/ui/src/hooks/useHidRpc.ts +++ b/ui/src/hooks/useHidRpc.ts @@ -192,10 +192,24 @@ export function useHidRpc(onHidRpcMessage?: (payload: RpcMessage) => void) { onHidRpcMessage?.(message); }; + const openHandler = () => { + console.warn("HID RPC channel opened"); + sendHandshake(); + }; + + const closeHandler = () => { + console.warn("HID RPC channel closed"); + setRpcHidProtocolVersion(null); + }; + rpcHidChannel.addEventListener("message", messageHandler); + rpcHidChannel.addEventListener("close", closeHandler); + rpcHidChannel.addEventListener("open", openHandler); return () => { rpcHidChannel.removeEventListener("message", messageHandler); + rpcHidChannel.removeEventListener("close", closeHandler); + rpcHidChannel.removeEventListener("open", openHandler); }; }, [