From a204bb167670982923d3b62254325e8a2c133dff Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Tue, 24 Mar 2026 16:38:16 +0200 Subject: [PATCH 1/2] [P] Split rows into websocket-sendable messages --- store/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/store/main.py b/store/main.py index 41c0785..e230c50 100644 --- a/store/main.py +++ b/store/main.py @@ -55,7 +55,8 @@ async def websocket_endpoint(websocket: WebSocket, user_id: int): for i in jsonable_data: i['timestamp'] = i['timestamp'].strftime("%Y-%m-%dT%H:%M:%SZ") - await websocket.send_json(json.dumps(jsonable_data)) + for i in jsonable_data: + await websocket.send_json(json.dumps([i])) # receive forever while True: -- 2.49.1 From bde51ca5e19bb8f79e618864ffa51262d8bc2ae7 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Tue, 24 Mar 2026 16:57:29 +0200 Subject: [PATCH 2/2] [P] Fix Store -> MapView websocket incompatibility --- MapView/main.py | 2 +- store/main.py | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/MapView/main.py b/MapView/main.py index a93cfdb..1b108c6 100644 --- a/MapView/main.py +++ b/MapView/main.py @@ -32,7 +32,7 @@ class MapViewApp(App): Встановлює необхідні маркери, викликає функцію для оновлення мапи """ self.update() - Clock.schedule_interval(self.update, 5) + Clock.schedule_interval(self.update, 0.1) def update(self, *args): """ diff --git a/store/main.py b/store/main.py index e230c50..f871c1c 100644 --- a/store/main.py +++ b/store/main.py @@ -33,7 +33,7 @@ processed_agent_data = Table( ) # WebSocket subscriptions -subscriptions: Dict[int, Set[WebSocket]] = {} +subscriptions: Set[WebSocket] = set() # FastAPI WebSocket endpoint @@ -41,10 +41,7 @@ subscriptions: Dict[int, Set[WebSocket]] = {} async def websocket_endpoint(websocket: WebSocket, user_id: int): await websocket.accept() - if user_id not in subscriptions: - subscriptions[user_id] = set() - - subscriptions[user_id].add(websocket) + subscriptions.add(websocket) try: # send already available data @@ -62,14 +59,13 @@ async def websocket_endpoint(websocket: WebSocket, user_id: int): while True: await websocket.receive_text() except WebSocketDisconnect: - subscriptions[user_id].remove(websocket) + subscriptions.remove(websocket) # Function to send data to subscribed users -async def send_data_to_subscribers(user_id: int, data): - if user_id in subscriptions: - for websocket in subscriptions[user_id]: - await websocket.send_json(json.dumps(data)) +async def send_data_to_subscribers(data): + for websocket in subscriptions: + await websocket.send_json(json.dumps([data])) # FastAPI CRUDL endpoints @@ -101,7 +97,7 @@ async def create_processed_agent_data(data: List[ProcessedAgentData], user_id: i session.commit() for record in created_records: - await send_data_to_subscribers(user_id, jsonable_encoder(record)) + await send_data_to_subscribers(jsonable_encoder(record)) return created_records except Exception as err: session.rollback() -- 2.49.1