mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
add disconnection from server functionality
had to refactor how the server connects
This commit is contained in:
@@ -21,6 +21,7 @@ from . import ui, prop, operator
|
||||
|
||||
classes = (
|
||||
operator.ConnectToWebsocketServer,
|
||||
operator.DisconnectWebsocketServer,
|
||||
operator.killWebsocketServer,
|
||||
prop.WebProperties,
|
||||
ui.BIM_PT_webui,
|
||||
|
||||
@@ -37,6 +37,16 @@ class ConnectToWebsocketServer(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class DisconnectWebsocketServer(bpy.types.Operator):
|
||||
bl_idname = "bim.disconnect_websocket_server"
|
||||
bl_label = "Disconnect from websocket server"
|
||||
bl_description = "disconnect from current websocket server"
|
||||
|
||||
def execute(self, context):
|
||||
core.disconnect_websocket_server(tool.Web)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class killWebsocketServer(bpy.types.Operator):
|
||||
bl_idname = "bim.kill_websocket_server"
|
||||
bl_label = "Kill websocket server"
|
||||
|
||||
@@ -50,3 +50,6 @@ class BIM_PT_webui(Panel):
|
||||
|
||||
row = layout.row()
|
||||
row.operator("bim.kill_websocket_server")
|
||||
|
||||
row = layout.row()
|
||||
row.operator("bim.disconnect_websocket_server")
|
||||
|
||||
@@ -18,7 +18,12 @@ def connect_websocket_server(web, 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)
|
||||
web.kill_websocket_server()
|
||||
|
||||
@@ -66,12 +66,13 @@ class Web(blenderbim.core.tool.Web):
|
||||
|
||||
@classmethod
|
||||
def connect_websocket_server(cls, port):
|
||||
def set_thread_loop(url):
|
||||
asyncio.set_event_loop(ws_thread_loop)
|
||||
asyncio.run(cls.sio_connect(url))
|
||||
def start_thread_loop(url):
|
||||
global ws_thread_loop
|
||||
ws_thread_loop = asyncio.new_event_loop()
|
||||
ws_thread_loop.run_until_complete(cls.sio_connect(url))
|
||||
|
||||
ws_url = "ws://localhost:" + str(port) + "/blender"
|
||||
wserver_thread = threading.Thread(target=set_thread_loop, args=(ws_url))
|
||||
ws_url = f"ws://localhost:{port}/blender"
|
||||
wserver_thread = threading.Thread(target=start_thread_loop, args=(ws_url,))
|
||||
wserver_thread.daemon = True
|
||||
wserver_thread.start()
|
||||
|
||||
@@ -83,7 +84,15 @@ class Web(blenderbim.core.tool.Web):
|
||||
# sio.on("data", test.message_handler, namespace="/blender")
|
||||
|
||||
# await sio.emit("data", {"from": "client"}, namespace="/blender")
|
||||
await sio.wait()
|
||||
|
||||
@classmethod
|
||||
def disconnect_websocket_server(cls):
|
||||
ws_thread_loop.run_until_complete(cls.sio_disconnect())
|
||||
print("Disconnected from websocket server")
|
||||
|
||||
@classmethod
|
||||
async def sio_disconnect(cls):
|
||||
await sio.disconnect()
|
||||
|
||||
@classmethod
|
||||
def kill_websocket_server(cls):
|
||||
|
||||
Reference in New Issue
Block a user