BaaS_Driver_Android_App/services/socket.ts

94 lines
2.5 KiB
TypeScript

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"));
}
};