fix(broadcast): migrate WebSocketServer.broadcast() callers to WebSocketMessage signature
Phase 5 of any_type_componentization_20260621 changed WebSocketServer.broadcast(channel, payload) -> broadcast(message: WebSocketMessage) but did not update internal callers. This produced worker[queue_fallback] TypeError spam on the GUI thread. Fixed 2 sites: - src/app_controller.py:1849 _process_pending_gui_tasks (telemetry broadcast) - src/events.py:115 AsyncEventQueue.put (events broadcast) gui_2.py has no internal broadcast callers (grep verified). Both callers now construct WebSocketMessage(channel=, payload=) at the call site. test_websocket_broadcast_regression.py 4/4 pass (was 1/4 failing in red phase).
This commit is contained in:
@@ -1841,12 +1841,13 @@ class AppController:
|
||||
|
||||
def _process_pending_gui_tasks(self) -> None:
|
||||
"""Processes pending GUI tasks from the queue on the main render thread."""
|
||||
from src.api_hooks import WebSocketMessage
|
||||
now = time.time()
|
||||
if hasattr(self, 'event_queue') and hasattr(self.event_queue, 'websocket_server') and self.event_queue.websocket_server:
|
||||
if now - self._last_telemetry_time >= 1.0:
|
||||
self._last_telemetry_time = now
|
||||
metrics = self.perf_monitor.get_metrics()
|
||||
self.event_queue.websocket_server.broadcast("telemetry", metrics)
|
||||
self.event_queue.websocket_server.broadcast(WebSocketMessage(channel="telemetry", payload=metrics))
|
||||
|
||||
if not self._pending_gui_tasks: return
|
||||
|
||||
|
||||
+3
-1
@@ -34,6 +34,8 @@ import queue
|
||||
from pathlib import Path
|
||||
from typing import Callable, Any, Dict, List, Tuple, Optional
|
||||
|
||||
from src.api_hooks import WebSocketMessage
|
||||
|
||||
|
||||
class EventEmitter:
|
||||
"""
|
||||
@@ -112,7 +114,7 @@ class AsyncEventQueue:
|
||||
elif hasattr(payload, '__dict__'):
|
||||
serializable_payload = vars(payload)
|
||||
|
||||
self.websocket_server.broadcast("events", {"event": event_name, "payload": serializable_payload})
|
||||
self.websocket_server.broadcast(WebSocketMessage(channel="events", payload={"event": event_name, "payload": serializable_payload}))
|
||||
|
||||
def get(self) -> Tuple[str, Any]:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user