From 7b22dfb66b3a1ea7d73b591983f5675a10ce4e05 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Thu, 8 Jan 2026 19:37:25 +0800 Subject: [PATCH] update cmd client --- .../Plugins/Engine/DirectX11Engine/main.cpp | 12 ++--- BasaltPresenter/Presenter/cmd_client.cpp | 44 +++++++++++-------- BasaltPresenter/Presenter/cmd_client.hpp | 24 +++++----- BasaltPresenter/Presenter/dll_loader.hpp | 10 ++--- BasaltPresenter/Presenter/main.cpp | 34 +++++++------- BasaltPresenter/Shared/basalt/deliver.cpp | 14 +++--- BasaltPresenter/Shared/basalt/deliver.hpp | 8 ++-- BasaltPresenter/Shared/basalt/engine.cpp | 10 ++--- BasaltPresenter/Shared/basalt/engine.hpp | 8 ++-- .../Shared/basalt/pipe_operator.cpp | 4 +- .../Shared/basalt/pipe_operator.hpp | 24 +++++----- .../{command_server.py => cmd_server.py} | 2 +- BasaltTrainer/main.py | 4 +- 13 files changed, 105 insertions(+), 93 deletions(-) rename BasaltTrainer/{command_server.py => cmd_server.py} (99%) diff --git a/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp b/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp index cb548a7..4ad42e5 100644 --- a/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp +++ b/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp @@ -190,8 +190,8 @@ private: std::vector depth_data; ///< 深度数据 public: - virtual void Startup(EngineConfig&& config) override { - IEngine::Startup(std::move(config)); + virtual void startup(EngineConfig&& config) override { + IEngine::startup(std::move(config)); // 创建Win32窗口并显示 if (this->config.headless) { @@ -320,8 +320,8 @@ public: //frameCount = 0; } - virtual bool Tick() override { - if (IEngine::Tick()) return true; + virtual bool tick() override { + if (IEngine::tick()) return true; // Event loop if (EventLoop()) return true; @@ -368,8 +368,8 @@ public: return false; } - virtual void Shutdown() override { - IEngine::Shutdown(); + virtual void shutdown() override { + IEngine::shutdown(); //if (hPipe != INVALID_HANDLE_VALUE) { // CloseHandle(hPipe); diff --git a/BasaltPresenter/Presenter/cmd_client.cpp b/BasaltPresenter/Presenter/cmd_client.cpp index 9b265ae..4972152 100644 --- a/BasaltPresenter/Presenter/cmd_client.cpp +++ b/BasaltPresenter/Presenter/cmd_client.cpp @@ -4,66 +4,72 @@ namespace basalt::presenter::cmd_client { - CommandClient::CommandClient() : m_PipeOperator(BSTEXT("ed0e3f1f-d214-4880-9562-640bce15e72e")), m_Status(ClientStatus::Ready) {} + CmdClient::CmdClient() : m_PipeOperator(BSTEXT("ed0e3f1f-d214-4880-9562-640bce15e72e")), m_Status(CmdClientStatus::Ready) {} - CommandClient::~CommandClient() {} + CmdClient::~CmdClient() {} - HandshakePayload CommandClient::WaitHandshake() { - if (m_Status != ClientStatus::Ready) { + HandshakePayload CmdClient::wait_handshake() { + if (m_Status != CmdClientStatus::Ready) { throw std::runtime_error("unexcpected client status"); } // Wait for handshake request from Trainer (code 0x61) ProtocolCode request_code; - m_PipeOperator.Read(&request_code, sizeof(request_code)); + m_PipeOperator.read_pod(request_code); if (request_code != ProtocolCode::HANDSHAKE_REQUEST) { throw std::runtime_error("unexpcted handshake code"); } // Accept payload HandshakePayload handshake_payload; - m_PipeOperator.Read(&handshake_payload, sizeof(HandshakePayload)); + m_PipeOperator.read_pod(handshake_payload); // Send handshake response (code 0x62) back to Trainer ProtocolCode response_code = ProtocolCode::HANDSHAKE_RESPONSE; - m_PipeOperator.Write(&response_code, sizeof(response_code)); + m_PipeOperator.write_pod(response_code); // Set status and return - m_Status = ClientStatus::Running; + m_Status = CmdClientStatus::Running; return handshake_payload; } - bool CommandClient::Tick(bool actively_stop) { - if (m_Status != ClientStatus::Running) { + bool CmdClient::tick(bool actively_stop) { + if (m_Status != CmdClientStatus::Running) { throw std::runtime_error("unexcpected client status"); } // If actively stop, send actively stop code to Trainer first if (actively_stop) { - ProtocolCode sent_code = ProtocolCode::STOP_REQUEST; - m_PipeOperator.Write(&sent_code, sizeof(sent_code)); + ProtocolCode actively_stop_code = ProtocolCode::STOP_REQUEST; + m_PipeOperator.write_pod(actively_stop_code); } // Send data ready code to Trainer - ProtocolCode sent_code = ProtocolCode::DATA_READY; - m_PipeOperator.Write(&sent_code, sizeof(sent_code)); + ProtocolCode data_ready_code = ProtocolCode::DATA_READY; + m_PipeOperator.write_pod(data_ready_code); // Process the response from Trainer while (true) { ProtocolCode recv_code; - m_PipeOperator.Read(&recv_code, sizeof(recv_code)); + m_PipeOperator.read_pod(recv_code); switch (recv_code) { - case ProtocolCode::DATA_RECEIVED: + case ProtocolCode::DATA_RECEIVED: { // Normal response, continue processing return false; // Not stopping - case Basalt::Presenter::ProtocolCode::STOP: + } + case ProtocolCode::STOP_REQUEST: { // Trainer wants to stop - m_Status = ClientStatus::Stop; + // We sent response first + ProtocolCode stop_response_code = ProtocolCode::STOP_RESPONSE; + m_PipeOperator.write_pod(stop_response_code); + // Set status and return. + m_Status = CmdClientStatus::Stop; return true; // Should stop + } default: throw std::runtime_error("unexpected code when running"); } } } -} // namespace Basalt::Presenter \ No newline at end of file +} // namespace basalt::presenter::cmd_client \ No newline at end of file diff --git a/BasaltPresenter/Presenter/cmd_client.hpp b/BasaltPresenter/Presenter/cmd_client.hpp index f991780..e1e01e7 100644 --- a/BasaltPresenter/Presenter/cmd_client.hpp +++ b/BasaltPresenter/Presenter/cmd_client.hpp @@ -10,9 +10,9 @@ namespace basalt::presenter::cmd_client { HANDSHAKE_RESPONSE = 0x62, ///< Presenter -> Trainer DATA_READY = 0x01, ///< Presenter -> Trainer DATA_RECEIVED = 0x02, ///< Trainer -> Presenter - ACTIVELY_STOP = 0x21, ///< Presenter-->Trainer - STOP_REQUEST = 0X71, ///< Presenter<--Trainer - STOP_RESPONSE = 0x72, //< Presenter-->Trainer + ACTIVELY_STOP = 0x21, ///< Presenter-->Trainer + STOP_REQUEST = 0X71, ///< Presenter<--Trainer + STOP_RESPONSE = 0x72, ///< Presenter-->Trainer }; // Pixel kind values @@ -32,26 +32,26 @@ namespace basalt::presenter::cmd_client { #pragma pack(pop) // Status - enum class ClientStatus { + enum class CmdClientStatus { Ready, Running, Stop, }; - class CommandClient { + class CmdClient { public: - CommandClient(); - ~CommandClient(); + CmdClient(); + ~CmdClient(); public: // Wait for handshake from Trainer, send response with data properties - HandshakePayload WaitHandshake(); + HandshakePayload wait_handshake(); // Tick function called every frame to send data ready and wait for response - bool Tick(bool actively_stop = false); + bool tick(bool actively_stop = false); private: - Shared::PipeOperator m_PipeOperator; - ClientStatus m_Status; + shared::pipe_operator::PipeOperator m_PipeOperator; + CmdClientStatus m_Status; }; -} // namespace Basalt::Presenter \ No newline at end of file +} // namespace basalt::presenter::cmd_client \ No newline at end of file diff --git a/BasaltPresenter/Presenter/dll_loader.hpp b/BasaltPresenter/Presenter/dll_loader.hpp index fd21d50..dd35d6d 100644 --- a/BasaltPresenter/Presenter/dll_loader.hpp +++ b/BasaltPresenter/Presenter/dll_loader.hpp @@ -9,10 +9,10 @@ namespace basalt::presenter::dll_loader { enum class DllKind { - Engine, ///< Render engine - Deliver, ///< Data deliver + Engine, ///< Render engine + Deliver, ///< Data deliver ObjectLoader, ///< 3D object loader - AnimeLoader, ///< Camera animation loader + AnimeLoader, ///< Camera animation loader }; class DllLoader { @@ -40,7 +40,7 @@ namespace basalt::presenter::dll_loader { } template void DestroyInstance(T* instance) { - using Fct = void (*) (T*); + using Fct = void (*)(T*); constexpr char EXPOSE_FUNC_NAME[] = "BSDestroyInstance"; auto fct = (Fct) GetFunctionPointer(EXPOSE_FUNC_NAME); fct(instance); @@ -50,4 +50,4 @@ namespace basalt::presenter::dll_loader { Handle m_Handle; }; -} // namespace Basalt::Presenter +} // namespace basalt::presenter::dll_loader diff --git a/BasaltPresenter/Presenter/main.cpp b/BasaltPresenter/Presenter/main.cpp index 1bac1fd..3b947e7 100644 --- a/BasaltPresenter/Presenter/main.cpp +++ b/BasaltPresenter/Presenter/main.cpp @@ -1,30 +1,32 @@ #include "dll_loader.hpp" -#include "command_client.hpp" +#include "cmd_client.hpp" #include -#include -namespace Presenter = ::Basalt::Presenter; -namespace Kernel = ::Basalt::Shared::Kernel; +namespace dll_loader = ::basalt::presenter::dll_loader; +using dll_loader::DllKind; +using dll_loader::DllLoader; + +using ::basalt::presenter::cmd_client::CmdClient; int main(int argc, char* argv[]) { - auto engine_dll = Presenter::DllLoader(Presenter::DllKind::Engine, BSTEXT("BasaltDirectX11Engine")); - auto deliver_dll = Presenter::DllLoader(Presenter::DllKind::Deliver, BSTEXT("BasaltPipeDeliver")); + auto engine_dll = DllLoader(DllKind::Engine, BSTEXT("BasaltDirectX11Engine")); + auto deliver_dll = DllLoader(DllKind::Deliver, BSTEXT("BasaltPipeDeliver")); - auto client = Presenter::CommandClient(); - auto payload = client.WaitHandshake(); + auto client = CmdClient(); + auto payload = client.wait_handshake(); - auto* engine = engine_dll.CreateInstance(); - auto* deliver = deliver_dll.CreateInstance(); + //auto* engine = engine_dll.CreateInstance(); + //auto* deliver = deliver_dll.CreateInstance(); - Kernel::EngineConfig engine_config{.headless = false, .title = BSTEXT("Fuck You"), .width = payload.width, .height = payload.height}; - engine->Startup(std::move(engine_config)); + //Kernel::EngineConfig engine_config{.headless = false, .title = BSTEXT("Fuck You"), .width = payload.width, .height = payload.height}; + //engine->startup(std::move(engine_config)); while (true) { - auto req_stop = engine->Tick(); - auto can_stop = client.Tick(req_stop); + auto req_stop = false; //engine->tick(); + auto can_stop = client.tick(req_stop); if (can_stop) break; } - engine->Shutdown(); - engine_dll.DestroyInstance(engine); + //engine->shutdown(); + //engine_dll.DestroyInstance(engine); } diff --git a/BasaltPresenter/Shared/basalt/deliver.cpp b/BasaltPresenter/Shared/basalt/deliver.cpp index 302b7aa..6458afe 100644 --- a/BasaltPresenter/Shared/basalt/deliver.cpp +++ b/BasaltPresenter/Shared/basalt/deliver.cpp @@ -5,23 +5,27 @@ namespace basalt::shared::deliver { IDeliver::IDeliver() {} - IDeliver::~IDeliver() {} + IDeliver::~IDeliver() { + if (this->status != DeliverStatus::Stop) { + this->shutdown(); + } + } - guid::Guid IDeliver::GetGuid() const { + guid::Guid IDeliver::get_guid() const { throw std::logic_error("unimplemented function"); } - void IDeliver::Startup(DeliverConfig &&config) { + void IDeliver::startup(DeliverConfig &&config) { if (this->status != DeliverStatus::Ready) throw std::runtime_error("unexpected deliver status"); this->config = std::move(config); this->status = DeliverStatus::Running; } - void IDeliver::Transmit() { + void IDeliver::transmit() { if (this->status != DeliverStatus::Running) throw std::runtime_error("unexpected deliver status"); } - void IDeliver::Shutdown() { + void IDeliver::shutdown() { if (this->status != DeliverStatus::Running) throw std::runtime_error("unexpected deliver status"); this->status = DeliverStatus::Stop; } diff --git a/BasaltPresenter/Shared/basalt/deliver.hpp b/BasaltPresenter/Shared/basalt/deliver.hpp index 1309050..a0b23de 100644 --- a/BasaltPresenter/Shared/basalt/deliver.hpp +++ b/BasaltPresenter/Shared/basalt/deliver.hpp @@ -19,10 +19,10 @@ namespace basalt::shared::deliver { virtual ~IDeliver(); public: - virtual guid::Guid GetGuid() const; - virtual void Startup(DeliverConfig&& config); - virtual void Transmit(); - virtual void Shutdown(); + virtual guid::Guid get_guid() const; + virtual void startup(DeliverConfig&& config); + virtual void transmit(); + virtual void shutdown(); protected: DeliverConfig config; diff --git a/BasaltPresenter/Shared/basalt/engine.cpp b/BasaltPresenter/Shared/basalt/engine.cpp index 7703c79..5ed8753 100644 --- a/BasaltPresenter/Shared/basalt/engine.cpp +++ b/BasaltPresenter/Shared/basalt/engine.cpp @@ -7,26 +7,26 @@ namespace basalt::shared::engine { IEngine::~IEngine() { if (this->status != EngineStatus::Stop) { - this->Shutdown(); + this->shutdown(); } } - guid::Guid IEngine::GetGuid() const { + guid::Guid IEngine::get_guid() const { throw std::logic_error("unimplemented function"); } - void IEngine::Startup(EngineConfig &&config) { + void IEngine::startup(EngineConfig &&config) { if (this->status != EngineStatus::Ready) throw std::runtime_error("unexpected engine status"); this->config = std::move(config); this->status = EngineStatus::Running; } - bool IEngine::Tick() { + bool IEngine::tick() { if (this->status != EngineStatus::Running) throw std::runtime_error("unexpected engine status"); return false; } - void IEngine::Shutdown() { + void IEngine::shutdown() { if (this->status != EngineStatus::Running) throw std::runtime_error("unexpected engine status"); this->status = EngineStatus::Stop; } diff --git a/BasaltPresenter/Shared/basalt/engine.hpp b/BasaltPresenter/Shared/basalt/engine.hpp index 6924a61..59f5142 100644 --- a/BasaltPresenter/Shared/basalt/engine.hpp +++ b/BasaltPresenter/Shared/basalt/engine.hpp @@ -24,14 +24,14 @@ namespace basalt::shared::engine { virtual ~IEngine(); public: - virtual guid::Guid GetGuid() const; - virtual void Startup(EngineConfig&& config); + virtual guid::Guid get_guid() const; + virtual void startup(EngineConfig&& config); /** * @brief * @return True for active exit. */ - virtual bool Tick(); - virtual void Shutdown(); + virtual bool tick(); + virtual void shutdown(); protected: EngineConfig config; diff --git a/BasaltPresenter/Shared/basalt/pipe_operator.cpp b/BasaltPresenter/Shared/basalt/pipe_operator.cpp index 64ec353..d2ca39f 100644 --- a/BasaltPresenter/Shared/basalt/pipe_operator.cpp +++ b/BasaltPresenter/Shared/basalt/pipe_operator.cpp @@ -78,7 +78,7 @@ namespace basalt::shared::pipe_operator { return *this; } - void PipeOperator::Read(void *buffer, size_t size) { + void PipeOperator::read(void *buffer, size_t size) { if (size == 0) { return; // 读取0字节直接返回 } @@ -124,7 +124,7 @@ namespace basalt::shared::pipe_operator { #endif } - void PipeOperator::Write(const void *buffer, size_t size) { + void PipeOperator::write(const void *buffer, size_t size) { if (size == 0) { return; // 写入0字节直接返回 } diff --git a/BasaltPresenter/Shared/basalt/pipe_operator.hpp b/BasaltPresenter/Shared/basalt/pipe_operator.hpp index c213076..40e7d05 100644 --- a/BasaltPresenter/Shared/basalt/pipe_operator.hpp +++ b/BasaltPresenter/Shared/basalt/pipe_operator.hpp @@ -32,26 +32,26 @@ namespace basalt::shared::pipe_operator { PipeOperator& operator=(PipeOperator&& other) noexcept; public: - void Read(void* buffer, size_t size); - void Write(const void* buffer, size_t size); + void read(void* buffer, size_t size); + void write(const void* buffer, size_t size); template - void ReadPod(TPod& buffer) { - Read(&buffer, sizeof(TPod)); + void read_pod(TPod& buffer) { + read(&buffer, sizeof(TPod)); } template - void WritePod(const TPod& buffer) { - Write(&buffer, sizeof(TPod)); + void write_pod(const TPod& buffer) { + write(&buffer, sizeof(TPod)); } - void ReadString(std::string& buffer) { + void read_string(std::string& buffer) { size_t length = 0; - ReadPod(length); + read_pod(length); buffer.resize(length); - Read(buffer.data(), length); + read(buffer.data(), length); } - void WriteString(std::string_view& buffer) { - WritePod(buffer.size()); - Write(buffer.data(), buffer.size()); + void write_string(std::string_view& buffer) { + write_pod(buffer.size()); + write(buffer.data(), buffer.size()); } private: diff --git a/BasaltTrainer/command_server.py b/BasaltTrainer/cmd_server.py similarity index 99% rename from BasaltTrainer/command_server.py rename to BasaltTrainer/cmd_server.py index 77b6783..796e869 100644 --- a/BasaltTrainer/command_server.py +++ b/BasaltTrainer/cmd_server.py @@ -40,7 +40,7 @@ CODE_PACKER: struct.Struct = struct.Struct("=B") HANDSHAKE_REQUEST_PACKER: struct.Struct = struct.Struct("=BII") -class CommandServer: +class CmdServer: """ Command server implementation for the Trainer side according to the protocol. """ diff --git a/BasaltTrainer/main.py b/BasaltTrainer/main.py index c9b58cc..1ce799b 100644 --- a/BasaltTrainer/main.py +++ b/BasaltTrainer/main.py @@ -1,4 +1,4 @@ -from command_server import CommandServer, HandshakePayload, PixelKind +from cmd_server import CmdServer, HandshakePayload, PixelKind from while_stopper import WhileStopper import logging import signal @@ -9,7 +9,7 @@ def receive_data() -> None: def main(): - server = CommandServer() + server = CmdServer() print('Please launch BasaltPresenter now.') print('Then press Enter to continue...')