feat: Meldung für Events darstellen (Kalibrierung, TDR ud Schleifenmessung)
This commit is contained in:
55
components/common/DeviceEventsBridge.tsx
Normal file
55
components/common/DeviceEventsBridge.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
"use client";
|
||||
import React from "react";
|
||||
import { useAppDispatch } from "@/redux/store";
|
||||
import { setEvents } from "@/redux/slices/deviceEventsSlice";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
loopMeasurementEvent?: number[];
|
||||
tdrMeasurementEvent?: number[];
|
||||
alignmentEvent?: number[];
|
||||
}
|
||||
}
|
||||
|
||||
const POLL_MS = 2000; // poll every 2 seconds
|
||||
|
||||
export default function DeviceEventsBridge() {
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
React.useEffect(() => {
|
||||
let lastSig = "";
|
||||
const readAndDispatch = () => {
|
||||
const ksx = Array.isArray(window.loopMeasurementEvent)
|
||||
? window.loopMeasurementEvent
|
||||
: undefined;
|
||||
const ksy = Array.isArray(window.tdrMeasurementEvent)
|
||||
? window.tdrMeasurementEvent
|
||||
: undefined;
|
||||
const ksz = Array.isArray(window.alignmentEvent)
|
||||
? window.alignmentEvent
|
||||
: undefined;
|
||||
// Build a stable signature of first 32 values per array
|
||||
const to32 = (a?: number[]) => {
|
||||
const out: number[] = [];
|
||||
if (Array.isArray(a)) {
|
||||
for (let i = 0; i < 32; i++) out.push(a[i] ? 1 : 0);
|
||||
} else {
|
||||
for (let i = 0; i < 32; i++) out.push(0);
|
||||
}
|
||||
return out;
|
||||
};
|
||||
const sig = `${to32(ksx).join("")}|${to32(ksy).join("")}|${to32(ksz).join(
|
||||
""
|
||||
)}`;
|
||||
if (sig !== lastSig) {
|
||||
lastSig = sig;
|
||||
dispatch(setEvents({ ksx, ksy, ksz }));
|
||||
}
|
||||
};
|
||||
readAndDispatch();
|
||||
const id = setInterval(readAndDispatch, POLL_MS);
|
||||
return () => clearInterval(id);
|
||||
}, [dispatch]);
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user