mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-16 18:44:47 +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"
|
||||
|
||||
def execute(self, context):
|
||||
port = context.scene.WebProperties.Webserver_port
|
||||
port = context.scene.WebProperties.webserver_port
|
||||
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)
|
||||
return {"FINISHED"}
|
||||
|
||||
@@ -43,4 +43,5 @@ class killWebsocketServer(bpy.types.Operator):
|
||||
bl_description = "Kill running websocket server"
|
||||
|
||||
def execute(self, context):
|
||||
core.kill_websocket_server(tool.Web)
|
||||
return {"FINISHED"}
|
||||
|
||||
@@ -31,4 +31,5 @@ from bpy.props import (
|
||||
|
||||
|
||||
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
|
||||
|
||||
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.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
|
||||
if web.is_port_available(port):
|
||||
web.start_websocket_server(port)
|
||||
web.show_webserver_running()
|
||||
else:
|
||||
web.hide_webserver_running()
|
||||
|
||||
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
|
||||
import socket
|
||||
import os
|
||||
import subprocess
|
||||
import webbrowser
|
||||
import asyncio
|
||||
import threading
|
||||
@@ -32,6 +33,7 @@ CONNECTION_CHECK_DELAY = 10
|
||||
connected_sockets = set()
|
||||
websocket_server: websockets.WebSocketServer
|
||||
ws_thread_loop = asyncio.new_event_loop()
|
||||
ws_process = None
|
||||
|
||||
|
||||
class Web(blenderbim.core.tool.Web):
|
||||
@@ -55,12 +57,39 @@ class Web(blenderbim.core.tool.Web):
|
||||
|
||||
@classmethod
|
||||
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
|
||||
def connect_websocket_server(cls, port):
|
||||
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
|
||||
def get_webui_data(cls):
|
||||
data = {}
|
||||
|
||||
Reference in New Issue
Block a user