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;