From c459929a913cbcd1298fc47263adf8e719196094 Mon Sep 17 00:00:00 2001 From: Siyuan Miao Date: Sat, 30 Aug 2025 14:10:35 +0200 Subject: [PATCH] chore: show hid rpc version --- ui/src/components/InfoBar.tsx | 8 ++++---- ui/src/hooks/useHidRpc.ts | 8 ++++++++ webrtc.go | 9 ++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ui/src/components/InfoBar.tsx b/ui/src/components/InfoBar.tsx index 36f6e95..8d0b282 100644 --- a/ui/src/components/InfoBar.tsx +++ b/ui/src/components/InfoBar.tsx @@ -15,8 +15,8 @@ import { useHidRpc } from "@/hooks/useHidRpc"; export default function InfoBar() { const { keysDownState } = useHidStore(); const { mouseX, mouseY, mouseMove } = useMouseStore(); - const { rpcHidReady } = useHidRpc(); - + const { rpcHidStatus } = useHidRpc(); + const videoClientSize = useVideoStore( (state: VideoState) => `${Math.round(state.clientWidth)}x${Math.round(state.clientHeight)}`, ); @@ -48,7 +48,7 @@ export default function InfoBar() { const modifierNames = Object.entries(modifiers).filter(([_, mask]) => (activeModifierMask & mask) !== 0).map(([name, _]) => name); const keyNames = Object.entries(keys).filter(([_, value]) => keysDown.includes(value)).map(([name, _]) => name); - return [...modifierNames,...keyNames].join(", "); + return [...modifierNames, ...keyNames].join(", "); }, [keysDownState, showPressedKeys]); return ( @@ -105,7 +105,7 @@ export default function InfoBar() { {debugMode && (
HidRPC State: - {rpcHidReady ? "Ready" : "Not Ready"} + {rpcHidStatus}
)} diff --git a/ui/src/hooks/useHidRpc.ts b/ui/src/hooks/useHidRpc.ts index e83ddb8..ebf5225 100644 --- a/ui/src/hooks/useHidRpc.ts +++ b/ui/src/hooks/useHidRpc.ts @@ -163,6 +163,13 @@ export function useHidRpc(onHidRpcMessage?: (payload: HidRpcMessage) => void) { return rpcHidChannel?.readyState === "open" && rpcHidProtocolVersion !== null; }, [rpcHidChannel, rpcHidProtocolVersion]); + const rpcHidStatus = useMemo(() => { + if (!rpcHidChannel) return "N/A"; + if (rpcHidChannel.readyState !== "open") return rpcHidChannel.readyState; + if (!rpcHidProtocolVersion) return "handshaking"; + return `ready (v${rpcHidProtocolVersion})`; + }, [rpcHidChannel, rpcHidProtocolVersion]); + const reportKeyboardEvent = useCallback( (keys: number[], modifier: number) => { if (!rpcHidReady) return; @@ -262,5 +269,6 @@ export function useHidRpc(onHidRpcMessage?: (payload: HidRpcMessage) => void) { reportRelMouseEvent, rpcHidProtocolVersion, rpcHidReady, + rpcHidStatus, }; } diff --git a/webrtc.go b/webrtc.go index 6b0c572..bbfce0a 100644 --- a/webrtc.go +++ b/webrtc.go @@ -134,21 +134,24 @@ func newSession(config SessionConfig) (*Session, error) { }() scopedLogger.Info().Str("label", d.Label()).Uint16("id", *d.ID()).Msg("New DataChannel") + switch d.Label() { case "hidrpc": session.HidChannel = d d.OnMessage(func(msg webrtc.DataChannelMessage) { + l := scopedLogger.With().Str("data", string(msg.Data)).Int("length", len(msg.Data)).Logger() + if msg.IsString { - scopedLogger.Warn().Str("data", string(msg.Data)).Msg("received string data in HID RPC message handler") + l.Warn().Msg("received string data in HID RPC message handler") return } if len(msg.Data) < 1 { - scopedLogger.Warn().Int("length", len(msg.Data)).Msg("received empty data in HID RPC message handler") + l.Warn().Msg("received empty data in HID RPC message handler") return } - scopedLogger.Debug().Str("data", string(msg.Data)).Msg("received data in HID RPC message handler") + l.Trace().Msg("received data in HID RPC message handler") // Enqueue to ensure ordered processing session.hidQueue <- msg