fix connection bug

This commit is contained in:
wtz
2026-04-04 12:57:22 +08:00
parent 480639f0e7
commit 1f40041e22
2 changed files with 12 additions and 5 deletions

View File

@@ -35,17 +35,18 @@ class Device:
) )
self.on_msg_callback = on_msg_callback if on_msg_callback is not None else lambda _, __ : None self.on_msg_callback = on_msg_callback if on_msg_callback is not None else lambda _, __ : None
self.on_error_callback = on_error_callback if on_error_callback is not None else lambda _ : None self.on_error_callback = on_error_callback if on_error_callback is not None else lambda _ : None
self.is_connected = False
def _on_open(self, ws): def _on_open(self, ws):
print("open") self.is_connected = True
def _on_close(self, ws, close_status_code, close_msg): def _on_close(self, ws, close_status_code, close_msg):
print("close") self.is_connected = False
def _on_message(self, ws, message): def _on_message(self, ws, message):
try: try:
message_str = json.loads(message)["payload"] message_str = json.loads(message)["payload"]
self.on_msg_callback(message_str["point"], message_str["value"]) self.on_msg_callback(message_str["point"], message_str["value"])
except KeyError or JSONDecodeError: except (KeyError, JSONDecodeError):
self.on_error_callback(ServerException("Page or server sent an invalid message")) self.on_error_callback(ServerException("Page or server sent an invalid message"))
except Exception as e: except Exception as e:
self.on_error_callback(e) self.on_error_callback(e)
@@ -63,13 +64,19 @@ class Device:
"timestamp": int(time.time() * 1000) "timestamp": int(time.time() * 1000)
})) }))
def connect(self): def connect(self, timeout: float = 5.0):
""" """
在新线程中运行客户端循环(推荐) 在新线程中运行客户端循环(推荐)
""" """
wst = threading.Thread(target=self.ws.run_forever) wst = threading.Thread(target=self.ws.run_forever)
wst.daemon = True wst.daemon = True
wst.start() wst.start()
start_time = time.time()
while not self.is_connected:
if time.time() - start_time > timeout:
if not self.is_connected:
self.on_error_callback(TimeoutError(f"WebSocket connection timed out after {timeout} seconds"))
time.sleep(0.05)
def main_loop(self): def main_loop(self):
""" """