mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-10-03 13:28:19 +00:00
add starting webserver and terminating webserver
This commit is contained in:
@@ -28,11 +28,11 @@ class ConnectToWebsocketServer(bpy.types.Operator):
|
|||||||
bl_description = "Start/Connect to a Websocket server"
|
bl_description = "Start/Connect to a Websocket server"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
port = context.scene.WebProperties.Webserver_port
|
port = context.scene.WebProperties.webserver_port
|
||||||
if port == 0:
|
if port == 0:
|
||||||
context.scene.WebProperties.Webserver_port = core.generate_port_number(tool.Web)
|
context.scene.WebProperties.webserver_port = core.generate_port_number(tool.Web)
|
||||||
|
|
||||||
port = context.scene.WebProperties.Webserver_port
|
port = context.scene.WebProperties.webserver_port
|
||||||
core.connect_websocket_server(tool.Web, port)
|
core.connect_websocket_server(tool.Web, port)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@@ -43,4 +43,5 @@ class killWebsocketServer(bpy.types.Operator):
|
|||||||
bl_description = "Kill running websocket server"
|
bl_description = "Kill running websocket server"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
|
core.kill_websocket_server(tool.Web)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|||||||
@@ -31,4 +31,5 @@ from bpy.props import (
|
|||||||
|
|
||||||
|
|
||||||
class WebProperties(PropertyGroup):
|
class WebProperties(PropertyGroup):
|
||||||
Webserver_port: IntProperty(name="Webserver Port")
|
webserver_port: IntProperty(name="Webserver Port")
|
||||||
|
show_webserver_running: BoolProperty(name="Show Webserver Running", default=False)
|
||||||
|
|||||||
@@ -35,7 +35,11 @@ class BIM_PT_webui(Panel):
|
|||||||
props = scene.WebProperties
|
props = scene.WebProperties
|
||||||
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(props, "Webserver_port", text="Webserver Port")
|
row.prop(props, "webserver_port", text="Webserver Port")
|
||||||
|
|
||||||
|
if props.show_webserver_running:
|
||||||
|
row = layout.row()
|
||||||
|
row.label(text=f"Web Server running on port {props.webserver_port}")
|
||||||
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.operator("bim.connect_websocket_server")
|
row.operator("bim.connect_websocket_server")
|
||||||
|
|||||||
@@ -10,5 +10,13 @@ def connect_websocket_server(web, port):
|
|||||||
# check if port already has a server listening to it
|
# check if port already has a server listening to it
|
||||||
if web.is_port_available(port):
|
if web.is_port_available(port):
|
||||||
web.start_websocket_server(port)
|
web.start_websocket_server(port)
|
||||||
|
web.show_webserver_running()
|
||||||
|
else:
|
||||||
|
web.hide_webserver_running()
|
||||||
|
|
||||||
web.connect_websocket_server(port)
|
web.connect_websocket_server(port)
|
||||||
|
|
||||||
|
|
||||||
|
def kill_websocket_server(web):
|
||||||
|
web.kill_websocket_server()
|
||||||
|
web.hide_webserver_running()
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import blenderbim.core.tool
|
|||||||
from typing import Union, Literal
|
from typing import Union, Literal
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
|
import subprocess
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import asyncio
|
import asyncio
|
||||||
import threading
|
import threading
|
||||||
@@ -32,6 +33,7 @@ CONNECTION_CHECK_DELAY = 10
|
|||||||
connected_sockets = set()
|
connected_sockets = set()
|
||||||
websocket_server: websockets.WebSocketServer
|
websocket_server: websockets.WebSocketServer
|
||||||
ws_thread_loop = asyncio.new_event_loop()
|
ws_thread_loop = asyncio.new_event_loop()
|
||||||
|
ws_process = None
|
||||||
|
|
||||||
|
|
||||||
class Web(blenderbim.core.tool.Web):
|
class Web(blenderbim.core.tool.Web):
|
||||||
@@ -55,12 +57,39 @@ class Web(blenderbim.core.tool.Web):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def start_websocket_server(cls, port):
|
def start_websocket_server(cls, port):
|
||||||
pass
|
global ws_process
|
||||||
|
ws_path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "webui", "app.py")
|
||||||
|
|
||||||
|
env = os.environ.copy()
|
||||||
|
env["FLASK_APP"] = ws_path
|
||||||
|
|
||||||
|
ws_process = subprocess.Popen(["flask", "run", str(port), "--debug"], env=env)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def connect_websocket_server(cls, port):
|
def connect_websocket_server(cls, port):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def kill_websocket_server(cls):
|
||||||
|
global ws_process
|
||||||
|
|
||||||
|
if ws_process is None:
|
||||||
|
print("No webserver running")
|
||||||
|
return
|
||||||
|
|
||||||
|
ws_process.terminate()
|
||||||
|
ws_process.wait()
|
||||||
|
print("Webserver terminated successfully")
|
||||||
|
ws_process = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def show_webserver_running(cls):
|
||||||
|
bpy.context.scene.WebProperties.show_webserver_running = True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def hide_webserver_running(cls):
|
||||||
|
bpy.context.scene.WebProperties.show_webserver_running = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_webui_data(cls):
|
def get_webui_data(cls):
|
||||||
data = {}
|
data = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user