change ui to show buttons according to connected/running

and moved setting is_connected and is_running to inside the tool itself
This commit is contained in:
Ziad-I
2024-06-13 19:51:11 +03:00
committed by Dion Moult
parent 467602aec3
commit 9ec51e040e
3 changed files with 22 additions and 17 deletions
@@ -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")
-7
View File
@@ -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)
+13 -3
View File
@@ -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):