From e612c852e583d8d0a6f88268dc359334b5fafef0 Mon Sep 17 00:00:00 2001 From: wuxu Date: Sat, 23 May 2026 08:58:03 +0800 Subject: [PATCH] update dna and panel controls --- src/App.js | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/App.js b/src/App.js index 0d73add..1adaf6d 100644 --- a/src/App.js +++ b/src/App.js @@ -18,7 +18,7 @@ import ConnectionIndicators from './ConnectionIndicators'; import DnsIcon from '@mui/icons-material/Dns'; import LanIcon from '@mui/icons-material/Lan'; import CompactSidebar from './CompactSidebar'; -import DNAServerModal from './DNAServerModal'; +import DynamicNodeIdServer from './services/DynamicNodeIdServer'; window.mavlinkSession = new MavlinkSession(); window.localNode = new dronecan.Node({name: "com.vimdrones.web_gui"}); @@ -43,25 +43,26 @@ const App = () => { const [snackbarMessage, setSnackbarMessage] = useState(''); const [snackbarSeverity, setSnackbarSeverity] = useState('info'); const [selectedBus, setSelectedBus] = useState(0); - const [dnaModalOpen, setDnaModalOpen] = useState(false); const [dnaServerActive, setDnaServerActive] = useState(false); const openWindow = (windowTitle, windowPath, windowSize) => { - if (subWindowRef[windowPath]) { + if (subWindowRef[windowPath] && !subWindowRef[windowPath].closed) { subWindowRef[windowPath].focus(); return; } const newWindow = window.open(windowPath, windowTitle, windowSize); if (newWindow) { - subWindowRef[windowPath] = newWindow; - setSubWindowRef(subWindowRef); + setSubWindowRef((prev) => ({ ...prev, [windowPath]: newWindow })); newWindow.addEventListener('beforeunload', () => { - subWindowRef[windowPath] = null; - setSubWindowRef(subWindowRef); + setSubWindowRef((prev) => { + const next = { ...prev }; + delete next[windowPath]; + return next; + }); }); } else { - console.error(`Main: Failed to open ${windowName}`); + console.error(`Main: Failed to open ${windowTitle}`); } }; @@ -106,18 +107,24 @@ const App = () => { setModalOpen(true); }; - const handleCloseModal = (serverRunning) => { + const handleCloseModal = () => { setModalOpen(false); - setDnaServerActive(serverRunning); }; - const handleOpenDnaModal = () => { - setDnaModalOpen(true); - }; + const handleToggleDnaServer = () => { + if (!window.dnaServer) { + window.dnaServer = new DynamicNodeIdServer(window.localNode); + } - const handleCloseDnaModal = (serverRunning) => { - setDnaModalOpen(false); - setDnaServerActive(serverRunning); + if (window.dnaServer.getStatus().isActive) { + window.dnaServer.stop(); + setDnaServerActive(false); + showMessage('DNA server stopped', 'info'); + } else { + const success = window.dnaServer.start(1, 125); + setDnaServerActive(success); + showMessage(success ? 'DNA server started' : 'Failed to start DNA server', success ? 'success' : 'error'); + } }; return ( @@ -190,7 +197,7 @@ const App = () => { }} /> : } - onClick={handleOpenDnaModal} + onClick={handleToggleDnaServer} sx={dnaServerActive ? { borderColor: 'success.main', '&:hover': { @@ -277,11 +284,6 @@ const App = () => { selectedBus={selectedBus} onBusChange={handleBusChange} /> -