From eb6241c18b8238853e922f9ac2404e128cbfe2a1 Mon Sep 17 00:00:00 2001 From: timonmerk Date: Fri, 4 Oct 2024 17:57:12 +0200 Subject: [PATCH] WIP socket is closed and no data can be sent --- gui_dev/bun.lockb | Bin 376725 -> 377075 bytes gui_dev/package.json | 1 + gui_dev/src/App.jsx | 19 ++++++++++-------- gui_dev/src/pages/Dashboard.jsx | 5 +++++ .../pages/SourceSelection/FileSelector.jsx | 2 +- py_neuromodulation/gui/backend/app_backend.py | 2 ++ py_neuromodulation/gui/backend/app_manager.py | 5 +++-- py_neuromodulation/stream/stream.py | 4 ++-- 8 files changed, 25 insertions(+), 13 deletions(-) diff --git a/gui_dev/bun.lockb b/gui_dev/bun.lockb index 019f3b1e925e137d3a45baf1aae7d41b763b2085..aecf949cc17e1269baea45b5b6a2f4a90cfb0ee0 100755 GIT binary patch delta 49306 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 ||+aJfRfw(we8+QtsgOrb1M_&5#zhRY+ZQU&= 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 CwHsLg delta 50783 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 F**_;g>%Ra1 diff --git a/gui_dev/package.json b/gui_dev/package.json index b5999900..43aa3ee1 100644 --- a/gui_dev/package.json +++ b/gui_dev/package.json @@ -13,6 +13,7 @@ "@emotion/styled": "^11.13.0", "@mui/icons-material": "latest", "@mui/material": "latest", + "cbor-js": "^0.1.0", "immer": "^10.1.1", "plotly.js": "^2.35.2", "plotly.js-basic-dist-min": "^2.35.2", diff --git a/gui_dev/src/App.jsx b/gui_dev/src/App.jsx index a97f8c75..8b4f6170 100644 --- a/gui_dev/src/App.jsx +++ b/gui_dev/src/App.jsx @@ -45,14 +45,17 @@ export const App = () => { const connectSocket = useSocketStore((state) => state.connectSocket); const disconnectSocket = useSocketStore((state) => state.disconnectSocket); - useEffect(() => { - console.log("Connecting socket from App component..."); - connectSocket(); - return () => { - console.log("Disconnecting socket from App component..."); - disconnectSocket(); - }; - }, [connectSocket, disconnectSocket]); + connectSocket(); + + // What does this effect do? + // useEffect(() => { + // console.log("Connecting socket from App component..."); + // connectSocket(); + // return () => { + // console.log("Disconnecting socket from App component..."); + // disconnectSocket(); + // }; + // }, [connectSocket, disconnectSocket]); return ( diff --git a/gui_dev/src/pages/Dashboard.jsx b/gui_dev/src/pages/Dashboard.jsx index 418505fd..b934d34d 100644 --- a/gui_dev/src/pages/Dashboard.jsx +++ b/gui_dev/src/pages/Dashboard.jsx @@ -3,9 +3,14 @@ import { PSDGraph } from '@/components/PSDGraph'; import { HeatmapGraph } from '@/components/HeatmapGraph'; import { Box, Button } from '@mui/material'; import { useSessionStore } from "@/stores"; +import { useSocketStore } from '@/stores'; export const Dashboard = () => { + // CHECK why websocket 1. closed and 2. how to open it again before stream is started + //const connectSocket = useSocketStore((state) => state.connectSocket); + //connectSocket(); + const startStream = useSessionStore((state) => state.startStream); const stopStream = useSessionStore((state) => state.stopStream); diff --git a/gui_dev/src/pages/SourceSelection/FileSelector.jsx b/gui_dev/src/pages/SourceSelection/FileSelector.jsx index c5f149d8..5c63a201 100644 --- a/gui_dev/src/pages/SourceSelection/FileSelector.jsx +++ b/gui_dev/src/pages/SourceSelection/FileSelector.jsx @@ -19,7 +19,7 @@ export const FileSelector = () => { ); const setSourceType = useSessionStore((state) => state.setSourceType); - const fileBrowserDirRef = useRef("C:/dev/"); + const fileBrowserDirRef = useRef("C:\\code\\py_neuromodulation\\py_neuromodulation\\data\\sub-testsub\\ses-EphysMedOff\\ieeg\\sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr"); const [isSelecting, setIsSelecting] = useState(false); const [showFileBrowser, setShowFileBrowser] = useState(false); diff --git a/py_neuromodulation/gui/backend/app_backend.py b/py_neuromodulation/gui/backend/app_backend.py index 47dd3499..ea844a8d 100644 --- a/py_neuromodulation/gui/backend/app_backend.py +++ b/py_neuromodulation/gui/backend/app_backend.py @@ -131,6 +131,8 @@ async def handle_stream_control(data: dict): self.logger.info(self.websocket_manager) # TODO: I cannot interact with stream_state_queue, # since the async function is really waiting until the stream finished + #await self.websocket_manager.connect(websocket) + asyncio.create_task(self.pynm_state.start_run_function( #out_dir=data["out_dir"], #experiment_name=data["experiment_name"], diff --git a/py_neuromodulation/gui/backend/app_manager.py b/py_neuromodulation/gui/backend/app_manager.py index a9829ccd..41693a59 100644 --- a/py_neuromodulation/gui/backend/app_manager.py +++ b/py_neuromodulation/gui/backend/app_manager.py @@ -278,8 +278,9 @@ def launch(self) -> None: target=run_backend, kwargs={ "shutdown_event": self.shutdown_event, - "debug": self.debug, - "reload": self.dev, + "debug": self.debug,` + # Could the reload be responsible for closing the websocket? + "reload": False, # self.dev }, name="Backend", ) diff --git a/py_neuromodulation/stream/stream.py b/py_neuromodulation/stream/stream.py index c91ff4ee..ace4d8a6 100644 --- a/py_neuromodulation/stream/stream.py +++ b/py_neuromodulation/stream/stream.py @@ -342,8 +342,8 @@ async def run( if websocket_featues is not None: nm.logger.info("Sending message to Websocket") #nm.logger.info(feature_dict) - await websocket_featues.send_cbor(feature_dict) - #await websocket_featues.send_message(feature_dict) + #await websocket_featues.send_cbor(feature_dict) + await websocket_featues.send_message(feature_dict) self.batch_count += 1 if self.batch_count % self.save_interval == 0: self.db.commit()