add starting webserver and terminating webserver

This commit is contained in:
Ziad-I
2024-06-11 21:02:12 +03:00
committed by Dion Moult
parent 24662d75e4
commit de7d315eb3
5 changed files with 49 additions and 6 deletions
@@ -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")
+8
View File
@@ -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()
+30 -1
View File
@@ -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 = {}