mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 16:29:51 +03:00
unused
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
import { debounce } from 'lodash-es';
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import Sockette from 'sockette';
|
||||
|
||||
import { addAccessTokenParameter } from 'api/authentication';
|
||||
|
||||
interface WebSocketIdMessage {
|
||||
type: 'id';
|
||||
id: string;
|
||||
}
|
||||
|
||||
interface WebSocketPayloadMessage<D> {
|
||||
type: 'payload';
|
||||
origin_id: string;
|
||||
payload: D;
|
||||
}
|
||||
|
||||
export type WebSocketMessage<D> = WebSocketIdMessage | WebSocketPayloadMessage<D>;
|
||||
|
||||
export const useWs = <D>(wsUrl: string, wsThrottle = 100) => {
|
||||
const ws = useRef<Sockette>();
|
||||
const clientId = useRef<string>();
|
||||
|
||||
const [connected, setConnected] = useState<boolean>(false);
|
||||
const [data, setData] = useState<D>();
|
||||
const [transmit, setTransmit] = useState<boolean>();
|
||||
const [clear, setClear] = useState<boolean>();
|
||||
|
||||
const onMessage = useCallback((event: MessageEvent) => {
|
||||
const rawData = event.data;
|
||||
if (typeof rawData === 'string' || rawData instanceof String) {
|
||||
const message = JSON.parse(rawData as string) as WebSocketMessage<D>;
|
||||
switch (message.type) {
|
||||
case 'id':
|
||||
clientId.current = message.id;
|
||||
break;
|
||||
case 'payload':
|
||||
if (clientId.current) {
|
||||
setData((existingData) => (clientId.current === message.origin_id && existingData) || message.payload);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, []);
|
||||
|
||||
const doSaveData = useCallback((newData: D, clearData = false) => {
|
||||
if (!ws.current) {
|
||||
return;
|
||||
}
|
||||
if (clearData) {
|
||||
setData(undefined);
|
||||
}
|
||||
ws.current.json(newData);
|
||||
}, []);
|
||||
|
||||
const saveData = useRef(debounce(doSaveData, wsThrottle));
|
||||
|
||||
const updateData = (newData: React.SetStateAction<D | undefined>, transmitData: true, clearData: false) => {
|
||||
setData(newData);
|
||||
setTransmit(transmitData);
|
||||
setClear(clearData);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!transmit) {
|
||||
return;
|
||||
}
|
||||
data && saveData.current(data, clear);
|
||||
setTransmit(false);
|
||||
setClear(false);
|
||||
}, [doSaveData, data, transmit, clear]);
|
||||
|
||||
useEffect(() => {
|
||||
const instance = new Sockette(addAccessTokenParameter(wsUrl), {
|
||||
onmessage: onMessage,
|
||||
onopen: () => {
|
||||
setConnected(true);
|
||||
},
|
||||
onclose: () => {
|
||||
clientId.current = undefined;
|
||||
setConnected(false);
|
||||
setData(undefined);
|
||||
}
|
||||
});
|
||||
ws.current = instance;
|
||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||
return instance.close;
|
||||
}, [wsUrl, onMessage]);
|
||||
|
||||
return { connected, data, updateData } as const;
|
||||
};
|
||||
Reference in New Issue
Block a user