mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-09 13:52:23 +00:00
Check for PID file prior to connecting to newly started web socket server
This commit is contained in:
@@ -119,15 +119,26 @@ async def gantt(request):
|
|||||||
return web.Response(text=html_content, content_type="text/html")
|
return web.Response(text=html_content, content_type="text/html")
|
||||||
|
|
||||||
|
|
||||||
async def open_web_browser(app):
|
async def on_startup(app):
|
||||||
webbrowser.open(f"http://127.0.0.1:{sio_port}/")
|
pid_file = "running_pid.json"
|
||||||
|
|
||||||
|
if os.path.exists(pid_file):
|
||||||
|
with open(pid_file, "r") as f:
|
||||||
|
pids = json.load(f)
|
||||||
|
else:
|
||||||
|
pids = {}
|
||||||
|
|
||||||
|
pids[str(os.getpid())] = sio_port
|
||||||
|
|
||||||
|
with open(pid_file, "w") as f:
|
||||||
|
json.dump(pids, f, indent=4)
|
||||||
|
|
||||||
|
|
||||||
app.router.add_get("/", index)
|
app.router.add_get("/", index)
|
||||||
app.router.add_get("/gantt", gantt)
|
app.router.add_get("/gantt", gantt)
|
||||||
app.router.add_static("/jsgantt/", path="../gantt", name="jsgantt")
|
app.router.add_static("/jsgantt/", path="../gantt", name="jsgantt")
|
||||||
app.router.add_static("/static/", path="./static", name="static")
|
app.router.add_static("/static/", path="./static", name="static")
|
||||||
app.on_startup.append(open_web_browser)
|
app.on_startup.append(on_startup)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ 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)
|
||||||
|
if web.has_started(port):
|
||||||
|
web.connect_websocket_server(port)
|
||||||
|
web.open_web_browser(port)
|
||||||
|
return
|
||||||
|
|
||||||
web.connect_websocket_server(port)
|
web.connect_websocket_server(port)
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import blenderbim.core.tool
|
|||||||
import blenderbim.tool as tool
|
import blenderbim.tool as tool
|
||||||
import ifcopenshell.api.sequence
|
import ifcopenshell.api.sequence
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
import time
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
@@ -130,19 +131,6 @@ class Web(blenderbim.core.tool.Web):
|
|||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
|
|
||||||
pid_file = os.path.join(webui_path, "running_pid.json")
|
|
||||||
|
|
||||||
if os.path.exists(pid_file):
|
|
||||||
with open(pid_file, "r") as f:
|
|
||||||
pids = json.load(f)
|
|
||||||
else:
|
|
||||||
pids = {}
|
|
||||||
|
|
||||||
pids[str(ws_process.pid)] = port
|
|
||||||
|
|
||||||
with open(pid_file, "w") as f:
|
|
||||||
json.dump(pids, f, indent=4)
|
|
||||||
|
|
||||||
cls.set_is_running(True)
|
cls.set_is_running(True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -230,6 +218,24 @@ class Web(blenderbim.core.tool.Web):
|
|||||||
cls.set_is_running(False)
|
cls.set_is_running(False)
|
||||||
print("Websocket server terminated successfully")
|
print("Websocket server terminated successfully")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def has_started(cls, port):
|
||||||
|
max_time = 5
|
||||||
|
start = time.time()
|
||||||
|
while True:
|
||||||
|
if time.time() - start > max_time:
|
||||||
|
return False
|
||||||
|
webui_path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "webui")
|
||||||
|
pid_file = os.path.join(webui_path, "running_pid.json")
|
||||||
|
with open(pid_file, "r") as f:
|
||||||
|
try:
|
||||||
|
data = json.load(f)
|
||||||
|
if port in data.values():
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def send_webui_data(
|
def send_webui_data(
|
||||||
cls,
|
cls,
|
||||||
|
|||||||
Reference in New Issue
Block a user