import { io, Socket } from "socket.io-client"; import { store } from "../store"; import { updateTelemetry, setTelemetryLoading, setTelemetryError, } from "../store/telemetrySlice"; import { BmsState } from "@/constants/types"; const SERVER_URL = "http://dev.vec-tr.ai:8089/?dashboardId=deviceDashboardSocket&assetId=V16000868651064644504"; const TOKEN = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NCIsImFjdGlvbiI6ImF1dGgiLCJ0b2tlbi12ZXJzaW9uIjowLCJpYXQiOjE3NTE1Mzg0MDAsImV4cCI6MTc1MTYyNDgwMH0.QIGyV9_jbtv0F8YzbzIgn_669HJz2ftI8KckpPGN0UU"; let socket: Socket | null = null; export const initSocket = () => { store.dispatch(setTelemetryLoading()); socket = io(SERVER_URL, { transports: ["websocket"], extraHeaders: { Authorization: `Bearer ${TOKEN}`, controllingServer: "http://dev.vec-tr.ai:8082", }, reconnection: true, }); socket.on("connect", () => { console.log("Socket connected:", socket?.id); }); socket.on("connect_error", (error) => { console.error("Socket connection error:", error); store.dispatch(setTelemetryError("Socket connection failed")); }); socket.on("disconnect", (reason) => { console.log("Socket disconnecteddddd", reason); store.dispatch(setTelemetryError("Socket disconnected: " + reason)); }); socket.on("dataUpdate", handleSocketData); }; export const disconnectSocket = () => { if (socket) { socket.disconnect(); console.log("Socket disconnected"); } }; const handleSocketData = (data: any) => { console.log("..."); try { const SoH = data.dataSeries.assetData[0].bms[0].bmsSpecific.ivecSpecific.soh; const SoC = data?.dataSeries?.assetData?.[0]?.bms?.[0]?.batterySoc; const currentMode = data?.dataSeries?.assetData?.[0]?.bms?.[0]?.bmsSpecific?.ivecSpecific ?.ivecStatus?.currentMode; const gps = data?.dataSeries?.locationData?.gps; const lat = gps?.[1]; const lon = gps?.[2]; console.log("GPS Data:", lat, lon); let bms_state: BmsState | null = null; if (currentMode === 0) { bms_state = 0; } else if (currentMode === 1) { bms_state = -1; } else if (currentMode === 2) { bms_state = 1; } store.dispatch( updateTelemetry({ SoH, SoC, chargingState: bms_state, lat, lon, loading: false, error: null, }) ); } catch (err) { console.error("Error handling socket data:", err); store.dispatch(setTelemetryError("Data parsing failed")); } };