import React, { useEffect } from 'react';
import { Outlet } from 'react-router';
import { Toast } from 'antd-mobile';
import Bridge, { bridgeOb, emitBridgeEvent } from './utils/bridge';
import { useAppDispatch, useAppSelector } from './utils/hooks';
import { addNewPoint, updateTaskState } from './store/features/measureSlice';
import {
refreshStationList,
updateBleList,
updateDevice,
updateSyncProgress,
} from './store/features/contextSlice';
import { createWebSocket, sharedWsUrl } from './services/socket';
import {
fetchOrgTree,
fetchRailTypes,
syncBaseData,
updateSyncBaseProgress,
} from './store/features/baseData';
function App() {
const dispatch = useAppDispatch();
const baseState = useAppSelector((state) => state.baseData);
const contextState = useAppSelector((state) => state.context);
// 获取轨型数据
useEffect(() => {
if (baseState.railTypes.length === 0) {
dispatch(fetchRailTypes());
}
}, [baseState.railTypes.length, dispatch]);
// 监听推送消息,更新store
useEffect(() => {
const subscription = bridgeOb.subscribe((datagram) => {
if (datagram.type === 'measure-event') {
dispatch(updateTaskState(datagram.data));
} else if (datagram.type === 'measure-point') {
dispatch(addNewPoint(datagram.data));
} else if (datagram.type === 'peripheral-status') {
dispatch(updateDevice(datagram.data));
} else if (datagram.type === 'ble-list') {
dispatch(updateBleList(datagram.data));
} else if (datagram.type === 'sync-progress') {
dispatch(updateSyncProgress(datagram.data));
} else if (datagram.type === 'update-base-progress') {
dispatch(updateSyncBaseProgress(datagram.data));
}
});
return () => subscription.unsubscribe();
}, [dispatch]);
// 开启推送
useEffect(() => {
// if (appWebview) {
// registerBridgeFunc();
// } else {
//连接websocket
const wsClient = createWebSocket(sharedWsUrl);
const subscription = wsClient.dataOb.subscribe((data) => {
emitBridgeEvent(data);
});
wsClient.connect();
return () => subscription.unsubscribe();
// }
}, []);
// 初始同步数据
useEffect(() => {
Bridge.needSyncBaseData().then((res) => {
if (!res.success) {
return Toast.show(res.message);
}
if (res.data.needSync) {
dispatch(syncBaseData());
} else {
dispatch(fetchOrgTree());
}
});
}, [dispatch]);
// 同步完成后,重新获取局/段/线信息
useEffect(() => {
if (
baseState.syncBaseProgress.finish &&
!baseState.syncBaseProgress.error &&
baseState.syncBaseProgress.progress === 100
) {
dispatch(fetchOrgTree());
}
}, [baseState.syncBaseProgress, dispatch]);
// 预获取车站信息
useEffect(() => {
if (contextState.currXMCode) {
dispatch(
refreshStationList({
tljCode: contextState.currOrgCode,
gwdCode: contextState.currGWDCode,
xmCode: contextState.currXMCode,
})
);
}
}, [contextState.currGWDCode, contextState.currOrgCode, contextState.currXMCode, dispatch]);
return (
<>
{/*
*/}
>
);
}
export default App;