import React, { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { useApi } from "@/contexts/ApiContext"; interface JointData { type: "joint_update"; joints: Record; timestamp: number; } const WebSocketTest: React.FC = () => { const { baseUrl, wsBaseUrl, fetchWithHeaders } = useApi(); const [isConnected, setIsConnected] = useState(false); const [lastMessage, setLastMessage] = useState(null); const [connectionStatus, setConnectionStatus] = useState("Disconnected"); const [ws, setWs] = useState(null); const connect = () => { // First test server health fetchWithHeaders(`${baseUrl}/health`) .then((response) => response.json()) .then((data) => { console.log("Server health:", data); // Now try WebSocket connection const websocket = new WebSocket(`${wsBaseUrl}/ws/joint-data`); websocket.onopen = () => { console.log("WebSocket connected"); setIsConnected(true); setConnectionStatus("Connected"); setWs(websocket); }; websocket.onmessage = (event) => { try { const data: JointData = JSON.parse(event.data); setLastMessage(data); console.log("Received joint data:", data); } catch (error) { console.error("Error parsing message:", error); } }; websocket.onclose = (event) => { console.log("WebSocket closed:", event.code, event.reason); setIsConnected(false); setConnectionStatus(`Closed (${event.code})`); setWs(null); }; websocket.onerror = (error) => { console.error("WebSocket error:", error); setConnectionStatus("Error"); }; }) .catch((error) => { console.error("Server health check failed:", error); setConnectionStatus("Server unreachable"); }); }; const disconnect = () => { if (ws) { ws.close(); } }; useEffect(() => { return () => { if (ws) { ws.close(); } }; }, [ws]); return (

WebSocket Connection Test

Status: {connectionStatus}
{lastMessage && (

Last Joint Data:

Timestamp:{" "} {new Date(lastMessage.timestamp * 1000).toLocaleTimeString()}
Joints:
{Object.entries(lastMessage.joints).map(([joint, value]) => (
{joint}: {value.toFixed(4)} rad ( {((value * 180) / Math.PI).toFixed(2)}°)
))}
)}
Expected URL: {wsBaseUrl}/ws/joint-data
Make sure your FastAPI server is running!
); }; export default WebSocketTest;