From 9ec51e040ef221fa8b9a2462d6e3762eafe07f15 Mon Sep 17 00:00:00 2001 From: Ziad-I <68874104+Ziad-I@users.noreply.github.com> Date: Thu, 13 Jun 2024 19:51:11 +0300 Subject: [PATCH] change ui to show buttons according to connected/running and moved setting is_connected and is_running to inside the tool itself --- src/blenderbim/blenderbim/bim/module/web/ui.py | 16 +++++++++------- src/blenderbim/blenderbim/core/web.py | 7 ------- src/blenderbim/blenderbim/tool/web.py | 16 +++++++++++++--- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/web/ui.py b/src/blenderbim/blenderbim/bim/module/web/ui.py index 15cc46b774..221692ca27 100644 --- a/src/blenderbim/blenderbim/bim/module/web/ui.py +++ b/src/blenderbim/blenderbim/bim/module/web/ui.py @@ -35,21 +35,23 @@ class BIM_PT_webui(Panel): props = scene.WebProperties row = layout.row() - row.prop(props, "webserver_port", text="Webserver Port") + row.prop(props, "webserver_port", text="Websocket server Port") if props.is_running: row = layout.row() - row.label(text=f"Webserver running on port {props.webserver_port}") + row.label(text=f"Running on port: {props.webserver_port}") row = layout.row() row.operator("bim.connect_websocket_server") if props.is_connected: row = layout.row() - row.label(text=f"Connected to Webserver on port {props.webserver_port}") + row.label(text=f"Connected on port: {props.webserver_port}") - row = layout.row() - row.operator("bim.kill_websocket_server") + if props.is_running: + row = layout.row() + row.operator("bim.kill_websocket_server") - row = layout.row() - row.operator("bim.disconnect_websocket_server") + if props.is_connected: + row = layout.row() + row.operator("bim.disconnect_websocket_server") diff --git a/src/blenderbim/blenderbim/core/web.py b/src/blenderbim/blenderbim/core/web.py index dd6cd11911..ef2ec750c9 100644 --- a/src/blenderbim/blenderbim/core/web.py +++ b/src/blenderbim/blenderbim/core/web.py @@ -10,20 +10,13 @@ def connect_websocket_server(web, port): # check if port already has a server listening to it if web.is_port_available(port): web.start_websocket_server(port) - web.set_is_running(True) - else: - web.set_is_running(False) web.connect_websocket_server(port) - web.set_is_connected(True) def disconnect_websocket_server(web): web.disconnect_websocket_server() - web.set_is_connected(False) def kill_websocket_server(web): web.kill_websocket_server() - web.set_is_running(False) - web.set_is_connected(False) diff --git a/src/blenderbim/blenderbim/tool/web.py b/src/blenderbim/blenderbim/tool/web.py index 1fd2a95847..591c6b59c5 100644 --- a/src/blenderbim/blenderbim/tool/web.py +++ b/src/blenderbim/blenderbim/tool/web.py @@ -59,11 +59,16 @@ class Web(blenderbim.core.tool.Web): global ws_process ws_path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "webui", "sioserver.py") ws_process = subprocess.Popen(["python", ws_path, "--p", str(port), "--host", "127.0.0.1"]) + cls.set_is_running(True) @classmethod def connect_websocket_server(cls, port): global ws_thread, sio + if bpy.context.scene.WebProperties.is_connected: + print(f"Already connected to websocket server on port: {port}") + return + sio = socketio.AsyncClient(reconnection=True, reconnection_attempts=3, reconnection_delay=2, logger=True) ws_thread = AsyncioThread() @@ -72,6 +77,7 @@ class Web(blenderbim.core.tool.Web): ws_url = f"ws://localhost:{port}/blender" ws_thread.run_coro(cls.sio_connect(ws_url)) + cls.set_is_connected(True) @classmethod def disconnect_websocket_server(cls): @@ -80,21 +86,25 @@ class Web(blenderbim.core.tool.Web): ws_thread.stop() ws_thread = None sio = None + cls.set_is_connected(False) @classmethod def kill_websocket_server(cls): global ws_process if ws_process is None: - print("No webserver running") + print("No Websocket server running") return - cls.disconnect_websocket_server() + if bpy.context.scene.WebProperties.is_connected: + cls.disconnect_websocket_server() + ws_process.terminate() ws_process.wait() ws_process = None + cls.set_is_running(False) - print("Webserver terminated successfully") + print("Websocket server terminated successfully") @classmethod def send_webui_data(cls):