From a33e3068c8d30567517b3cf73b48789432784d0a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 9 Oct 2025 00:42:19 +0300 Subject: [PATCH] feat: resume on disconnect & add 'resumed' response --- src/devtools/DebuggingServer.cpp | 30 +++++++++++++++++++++++------- src/devtools/DebuggingServer.hpp | 2 ++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/devtools/DebuggingServer.cpp b/src/devtools/DebuggingServer.cpp index a9a32667..2baebf47 100644 --- a/src/devtools/DebuggingServer.cpp +++ b/src/devtools/DebuggingServer.cpp @@ -61,6 +61,10 @@ void ClientConnection::sendResponse(const std::string& type) { send(dv::object({{"type", type}})); } +bool ClientConnection::alive() const { + return network.getConnection(this->connection, true) != nullptr; +} + static network::Server& create_tcp_server( DebuggingServer& dbgServer, Engine& engine, int port ) { @@ -134,6 +138,10 @@ bool DebuggingServer::update() { } std::string message = connection->read(); if (message.empty()) { + if (!connection->alive()) { + connection.reset(); + return true; + } return false; } logger.debug() << "received: " << message; @@ -144,7 +152,10 @@ bool DebuggingServer::update() { return false; } const auto& type = obj["type"].asString(); - return performCommand(type, obj); + if (performCommand(type, obj)) { + connection->sendResponse("resumed"); + return true; + } } catch (const std::runtime_error& err) { logger.error() << "could not to parse message: " << err.what(); } @@ -219,12 +230,17 @@ void DebuggingServer::pause( if (connection == nullptr) { return; } - connection->send(dv::object({ - {"type", std::string("paused")}, - {"reason", std::move(reason)}, - {"message", std::move(message)}, - {"stack", std::move(stackTrace)} - })); + auto response = dv::object({{"type", std::string("paused")}}); + if (!reason.empty()) { + response["reason"] = std::move(reason); + } + if (!message.empty()) { + response["message"] = std::move(message); + } + if (stackTrace != nullptr) { + response["stack"] = std::move(stackTrace); + } + connection->send(std::move(response)); engine.startPauseLoop(); } diff --git a/src/devtools/DebuggingServer.hpp b/src/devtools/DebuggingServer.hpp index cd4931cb..13c9282b 100644 --- a/src/devtools/DebuggingServer.hpp +++ b/src/devtools/DebuggingServer.hpp @@ -31,6 +31,8 @@ namespace devtools { std::string read(); void send(const dv::value& message); void sendResponse(const std::string& type); + + bool alive() const; private: network::Network& network; size_t messageLength = 0;