IDKHowToCodeFr/tinyml-backend
1
1"use client";2 3import { createContext, useContext, useState, useCallback } from "react";4import { useResilientSocket, ConnectionStatus } from "@/hooks/useResilientSocket";5 6type StreamState = {7 hr: number[];8 temp: number[];9};10 11type TelemetryContextType = {12 data: any;13 stream: StreamState;14 status: ConnectionStatus;15};16 17const TelemetryContext = createContext<TelemetryContextType | null>(null);18 19export function TelemetryProvider({ children }: { children: React.ReactNode }) {20 const [data, setData] = useState<any>(null);21 const [stream, setStream] = useState<StreamState>({22 hr: Array(50).fill(75),23 temp: Array(50).fill(37.0)24 });25 26 const handleMessage = useCallback((msg: any) => {27 setData(msg);28 if (msg?.sensor_data) {29 setStream(prev => ({30 hr: [...prev.hr.slice(1), msg.sensor_data.Heart_Rate],31 temp: [...prev.temp.slice(1), msg.sensor_data.Body_Temp]32 }));33 }34 }, []);35 36 const wsUrl = process.env.NEXT_PUBLIC_WS_URL || "ws://localhost:8000/ws/feed";37 const status = useResilientSocket(wsUrl, handleMessage);38 39 return (40 <TelemetryContext.Provider value={{ data, stream, status }}>41 {children}42 </TelemetryContext.Provider>43 );44}45 46export function useTelemetry() {47 const context = useContext(TelemetryContext);48 if (!context) {49 throw new Error("useTelemetry must be used within a TelemetryProvider");50 }51 return context;52}53 