From e31fa510462b97ec1afc98a9424fe0fa20658ca9 Mon Sep 17 00:00:00 2001 From: Nordup Date: Wed, 19 Mar 2025 02:14:59 +0400 Subject: [PATCH] check if sandbox is running on bootup --- app/scenes/menu_body/world.tscn | 4 ++-- app/scripts/sandbox/process_checker.gd | 6 ++---- app/scripts/sandbox/sandbox_logger.gd | 3 --- app/scripts/sandbox/sandbox_manager.gd | 28 ++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/app/scenes/menu_body/world.tscn b/app/scenes/menu_body/world.tscn index bc533e7..927688a 100644 --- a/app/scenes/menu_body/world.tscn +++ b/app/scenes/menu_body/world.tscn @@ -165,11 +165,11 @@ script = ExtResource("10_cqo55") gate_events = ExtResource("2_q7cvi") command_events = ExtResource("6_18mgg") -[node name="ProcessChecker" type="Node" parent="." node_paths=PackedStringArray("snbx_logger")] +[node name="ProcessChecker" type="Node" parent="." node_paths=PackedStringArray("snbx_manager")] script = ExtResource("11_72cjp") gate_events = ExtResource("2_q7cvi") command_events = ExtResource("6_18mgg") -snbx_logger = NodePath("../SandboxLogger") +snbx_manager = NodePath("../SandboxManager") [node name="WorldCanvas" type="Control" parent="."] layout_mode = 1 diff --git a/app/scripts/sandbox/process_checker.gd b/app/scripts/sandbox/process_checker.gd index 6ac5d1d..9e5cffb 100644 --- a/app/scripts/sandbox/process_checker.gd +++ b/app/scripts/sandbox/process_checker.gd @@ -2,11 +2,10 @@ extends Node @export var gate_events: GateEvents @export var command_events: CommandEvents -@export var snbx_logger: SandboxLogger +@export var snbx_manager: SandboxManager # Timeout intervals for child process responsiveness const BOOTUP_CHECK_SEC = 1 -const BOOTUP_INTERVAL_MSEC = 5000 const HEARTBEAT_INTERVAL_SEC = 5 const WAIT_INTERVAL_SEC = 15 @@ -33,8 +32,7 @@ func start_bootup_check() -> void: func bootup_check() -> void: - var interval = Time.get_ticks_msec() - snbx_logger.last_log_tick - if interval < BOOTUP_INTERVAL_MSEC: return + if snbx_manager.is_sandbox_running(): return bootup_timer.stop() on_timeout() diff --git a/app/scripts/sandbox/sandbox_logger.gd b/app/scripts/sandbox/sandbox_logger.gd index 3b095c6..52824ae 100644 --- a/app/scripts/sandbox/sandbox_logger.gd +++ b/app/scripts/sandbox/sandbox_logger.gd @@ -16,7 +16,6 @@ var log_file: FileAccess var pipe: Dictionary var gate: Gate -var last_log_tick: int var print_logs: bool var logs_sent: bool @@ -32,7 +31,6 @@ func _ready() -> void: func start(_pipe: Dictionary, _gate: Gate) -> void: pipe = _pipe gate = _gate - last_log_tick = Time.get_ticks_msec() create_log_file() start_reading_pipes() @@ -83,7 +81,6 @@ func read_stderr() -> void: func store_buffer(buffer: PackedByteArray) -> void: if print_logs: printraw(buffer.get_string_from_utf8()) log_file.store_buffer(buffer) - last_log_tick = Time.get_ticks_msec() func cleanup() -> void: diff --git a/app/scripts/sandbox/sandbox_manager.gd b/app/scripts/sandbox/sandbox_manager.gd index 71cabda..a595e23 100644 --- a/app/scripts/sandbox/sandbox_manager.gd +++ b/app/scripts/sandbox/sandbox_manager.gd @@ -128,5 +128,33 @@ func kill_sandbox_macos() -> void: Debug.logclr("Process killed " + str(snbx_pid), Color.DIM_GRAY) +func is_sandbox_running() -> bool: + if snbx_pid == 0: return false + + match Platform.get_platform(): + Platform.WINDOWS: + var output = [] + OS.execute("cmd.exe", ["/c", "tasklist", "|", "findstr", snbx_pid], output) + Debug.logclr("tasklist: " + str(output), Color.DIM_GRAY) + return not output[0].is_empty() + + Platform.LINUX_BSD: + var output = [] + OS.execute("ps", ["-o", "pid=", "-p", snbx_pid], output) + Debug.logclr("ps: " + str(output), Color.DIM_GRAY) + return not output[0].is_empty() + + Platform.MACOS: + var output = [] + OS.execute("ps", ["-o", "pid=", "-p", snbx_pid], output) + Debug.logclr("ps: " + str(output), Color.DIM_GRAY) + return not output[0].is_empty() + + _: + assert(false, "Platform is not supported") + + return false + + func _exit_tree() -> void: kill_sandbox()