diff --git a/config.json b/config.json index 53e2e13..37082e0 100644 --- a/config.json +++ b/config.json @@ -13,7 +13,7 @@ "isBoard": false, "id": "makergen", "platform": ["win","mac","web","linux"], - "version": "0.0.1", + "version": "0.0.2", "asset": { "python": { "dir": "python/", diff --git a/python/libraries/makergen/__pycache__/__init__.cpython-38.pyc b/python/libraries/makergen/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..8c362cb Binary files /dev/null and b/python/libraries/makergen/__pycache__/__init__.cpython-38.pyc differ diff --git a/python/libraries/makergen/__pycache__/core.cpython-38.pyc b/python/libraries/makergen/__pycache__/core.cpython-38.pyc new file mode 100644 index 0000000..87248d1 Binary files /dev/null and b/python/libraries/makergen/__pycache__/core.cpython-38.pyc differ diff --git a/python/libraries/makergen/core.py b/python/libraries/makergen/core.py index 5b88bfd..c66898f 100644 --- a/python/libraries/makergen/core.py +++ b/python/libraries/makergen/core.py @@ -24,7 +24,7 @@ class Device: :param on_error_callback: 当遇到错误时的回调。接收一个参数,为错误对象;若遇到服务器或页面发送的消息不合规,传入ServerException对象 :param base_url: makergen的基础URL,通常为wss://api.makergen.cn """ - url = f"{base_url if base_url[-1] == '/' else base_url + "/"}ws/device/{device_id}?key={device_key}" + url = f"{base_url if base_url[-1] == '/' else base_url + '/'}ws/device/{device_id}?key={device_key}" print(url) self.ws = websocket.WebSocketApp( url, @@ -36,11 +36,15 @@ class Device: 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.is_connected = False + self._connect_event = threading.Event() def _on_open(self, ws): self.is_connected = True + self._connect_event.set() + def _on_close(self, ws, close_status_code, close_msg): self.is_connected = False + self._connect_event.clear() def _on_message(self, ws, message): try: @@ -68,15 +72,13 @@ class Device: """ 在新线程中运行客户端循环(推荐) """ + self._connect_event.clear() wst = threading.Thread(target=self.ws.run_forever) wst.daemon = True 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) + if not self._connect_event.wait(timeout=timeout): + self.on_error_callback(TimeoutError(f"WebSocket connection timed out after {timeout} seconds")) def main_loop(self): """ diff --git a/python/main.ts b/python/main.ts index b9cbf27..60560e0 100644 --- a/python/main.ts +++ b/python/main.ts @@ -11,8 +11,8 @@ namespace makergen{ let id=parameter.ID.code; let key=parameter.KEY.code; let baseurl=parameter.BASEURL.code; - Generator.addImport(`\nimport makergen\nmakergen_device = makergen.Device(${id},${key},on_msg_callback=makergen_callback, base_url=${baseurl})\n`); - Generator.addCode(`makergen_device.connect()\n`); + Generator.addImport(`\nimport makergen\n`); + Generator.addCode(`makergen_device = makergen.Device(${id},${key},on_msg_callback=(makergen_callback if "makergen_callback" in dir() else None), base_url=${baseurl})\nmakergen_device.connect()\n`); } //% block="向数据点 [POINT] 发送数据 [VALUE]" blockType="command" @@ -21,7 +21,7 @@ namespace makergen{ export function send_msg(parameter: any, block: any) { let point=parameter.POINT.code; let value=parameter.VALUE.code; - Generator.addCode(`makergen_device.send_data(${point},str(${value}))\n`); + Generator.addCode(`makergen_device.send_data(${point},${value})\n`); } //% block="当接收到消息时" blockType="hat"