From c4c841a2c1cd9abf0393d2d1b3e552aada1c28fe Mon Sep 17 00:00:00 2001 From: itsrubberduck Date: Fri, 20 Feb 2026 18:30:26 +0100 Subject: [PATCH] feat(ws): add stick-input WebSocket message handler and client support Co-Authored-By: Claude Opus 4.6 --- server/api/flightlab/ws.ts | 8 ++++++++ shared/composables/flightlab/useFlightLabSync.ts | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/server/api/flightlab/ws.ts b/server/api/flightlab/ws.ts index 5efdfa4..bdf6bc8 100644 --- a/server/api/flightlab/ws.ts +++ b/server/api/flightlab/ws.ts @@ -174,6 +174,14 @@ export default defineWebSocketHandler({ userSessionMap.set(data.userId, session.code) break } + + case 'stick-input': { + // Broadcast stick/throttle input to all peers in session (for PFD display) + const session = findSessionByPeer(peerId) + if (!session) return + broadcastToSession(session, { type: 'stick-input', data: data.data }, peerId) + break + } } }, diff --git a/shared/composables/flightlab/useFlightLabSync.ts b/shared/composables/flightlab/useFlightLabSync.ts index 2847d80..e56249c 100644 --- a/shared/composables/flightlab/useFlightLabSync.ts +++ b/shared/composables/flightlab/useFlightLabSync.ts @@ -16,6 +16,7 @@ export function useFlightLabSync() { onPeerLeft: [] as Array<(peerRole: FlightLabRole) => void>, onTelemetry: [] as Array<(data: any) => void>, onError: [] as Array<(msg: string) => void>, + onStickInput: [] as Array<(data: { pitch: number; roll: number; throttle: number }) => void>, } function connect(): Promise { @@ -77,6 +78,9 @@ export function useFlightLabSync() { case 'error': callbacks.onError.forEach(cb => cb(data.message)) break + case 'stick-input': + callbacks.onStickInput.forEach(cb => cb(data.data)) + break } } @@ -128,6 +132,11 @@ export function useFlightLabSync() { function onPeerLeft(cb: (role: FlightLabRole) => void) { callbacks.onPeerLeft.push(cb) } function onTelemetry(cb: (data: any) => void) { callbacks.onTelemetry.push(cb) } function onError(cb: (msg: string) => void) { callbacks.onError.push(cb) } + function onStickInput(cb: (data: { pitch: number; roll: number; throttle: number }) => void) { callbacks.onStickInput.push(cb) } + + function sendStickInput(data: { pitch: number; roll: number; throttle: number }) { + send({ type: 'stick-input', data }) + } return { isConnected, @@ -147,5 +156,7 @@ export function useFlightLabSync() { onPeerLeft, onTelemetry, onError, + onStickInput, + sendStickInput, } }