From 6cdd6b833cd8e0d9e2dbdfdfb486d261c2705d62 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 6 Jan 2026 23:13:17 +0300 Subject: [PATCH] feat: debugging server does not require network permission now --- src/engine/Engine.cpp | 3 ++- src/logic/scripting/lua/libs/libapp.cpp | 6 ++++++ src/logic/scripting/lua/libs/libnetwork.cpp | 8 +++++--- src/util/platform.cpp | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 5cb0e7ca6..5223a6c38 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -139,7 +139,8 @@ void Engine::initialize(CoreParameters coreParameters) { editor = std::make_unique(*this); cmd = std::make_unique(); - if (project->permissions.has(Permissions::NETWORK)) { + if (project->permissions.has(Permissions::NETWORK) || + !params.debugServerString.empty()) { network = network::Network::create(settings.network); } diff --git a/src/logic/scripting/lua/libs/libapp.cpp b/src/logic/scripting/lua/libs/libapp.cpp index d23f96cb0..c40aa63bd 100644 --- a/src/logic/scripting/lua/libs/libapp.cpp +++ b/src/logic/scripting/lua/libs/libapp.cpp @@ -29,6 +29,7 @@ static int l_start_debug_instance(lua::State* L) { throw std::runtime_error("could not find free port"); } } + auto projectPath = lua::isstring(L, 2) ? lua::require_lstring(L, 2) : ""; const auto& paths = engine->getPaths(); std::vector args { @@ -36,6 +37,11 @@ static int l_start_debug_instance(lua::State* L) { "--dir", paths.getUserFilesFolder().u8string(), "--dbg-server", "tcp:" + std::to_string(port), }; + if (!projectPath.empty()) { + args.emplace_back("--project"); + args.emplace_back(io::resolve(std::string(projectPath)).string()); + } + platform::new_engine_instance(std::move(args)); return lua::pushinteger(L, port); } diff --git a/src/logic/scripting/lua/libs/libnetwork.cpp b/src/logic/scripting/lua/libs/libnetwork.cpp index 390845207..7fbf6df8d 100644 --- a/src/logic/scripting/lua/libs/libnetwork.cpp +++ b/src/logic/scripting/lua/libs/libnetwork.cpp @@ -2,6 +2,7 @@ #include "coders/json.hpp" #include "engine/Engine.hpp" #include "network/Network.hpp" +#include "devtools/Project.hpp" #include #include @@ -439,7 +440,7 @@ static int l_is_nodelay(lua::State* L, network::Network& network) { return lua::pushboolean(L, false); } -static int l_pull_events(lua::State* L, network::Network& network) { +static int l_pull_events(lua::State* L) { std::vector local_queue; { std::lock_guard lock(events_queue_mutex); @@ -528,7 +529,8 @@ int wrap(lua_State* L) { int result = 0; try { auto network = engine->getNetwork(); - if (network == nullptr) { + const auto& permissions = engine->getProject().permissions; + if (network == nullptr || !permissions.has(Permissions::NETWORK)) { throw std::runtime_error( "network subsystem is not available in the project" ); @@ -554,7 +556,7 @@ const luaL_Reg networklib[] = { {"get_total_download", wrap}, {"find_free_port", wrap}, {"is_available", lua::wrap}, - {"__pull_events", wrap}, + {"__pull_events", lua::wrap}, {"__open_tcp", wrap}, {"__open_udp", wrap}, {"__closeserver", wrap}, diff --git a/src/util/platform.cpp b/src/util/platform.cpp index dce6f89b7..a7ba041db 100644 --- a/src/util/platform.cpp +++ b/src/util/platform.cpp @@ -281,6 +281,7 @@ void platform::new_engine_instance(const std::vector& args) { ss << " >/dev/null &"; auto command = ss.str(); + logger.info() << command; if (int res = system(command.c_str())) { throw std::runtime_error( "starting an engine instance failed with code: " +