1
0

finish representer protocol

This commit is contained in:
2026-01-10 17:10:14 +08:00
parent 1abafeb0ca
commit 2a52c8ed7d
7 changed files with 75 additions and 27 deletions

View File

@@ -1,5 +1,4 @@
#include "cmd_client.hpp"
#include <basalt/char_types.hpp>
#include <stdexcept>
namespace basalt::presenter::cmd_client {
@@ -21,7 +20,20 @@ namespace basalt::presenter::cmd_client {
}
// Accept payload
HandshakePayload handshake_payload;
m_PipeOperator.read_pod(handshake_payload);
std::uint8_t raw_headless;
m_PipeOperator.read_pod(raw_headless);
handshake_payload.headless = static_cast<bool>(raw_headless);
m_PipeOperator.read_pod(handshake_payload.pixel_kind);
m_PipeOperator.read_pod(handshake_payload.width);
m_PipeOperator.read_pod(handshake_payload.height);
m_PipeOperator.read_bsstring(handshake_payload.engine_name);
m_PipeOperator.read_pod(handshake_payload.engine_device);
m_PipeOperator.read_bsstring(handshake_payload.delivery_name);
m_PipeOperator.read_pod(handshake_payload.delivery_device);
m_PipeOperator.read_bsstring(handshake_payload.object_loader_name);
m_PipeOperator.read_bsstring(handshake_payload.object_loader_file);
m_PipeOperator.read_bsstring(handshake_payload.anime_loader_name);
m_PipeOperator.read_bsstring(handshake_payload.anime_loader_file);
// Send handshake response (code 0x62) back to Trainer
ProtocolCode response_code = ProtocolCode::HANDSHAKE_RESPONSE;

View File

@@ -1,4 +1,5 @@
#pragma once
#include <basalt/char_types.hpp>
#include <basalt/pipe_operator.hpp>
#include <cstdint>
@@ -23,13 +24,20 @@ namespace basalt::presenter::cmd_client {
RGB_U8 = 0x04 ///< RGB represented by three u8
};
#pragma pack(push, 1)
struct HandshakePayload {
bool headless;
PixelKind pixel_kind;
std::uint32_t width;
std::uint32_t height;
shared::char_types::BSString engine_name;
std::uint32_t engine_device;
shared::char_types::BSString delivery_name;
std::uint32_t delivery_device;
shared::char_types::BSString object_loader_name;
shared::char_types::BSString object_loader_file;
shared::char_types::BSString anime_loader_name;
shared::char_types::BSString anime_loader_file;
};
#pragma pack(pop)
// Status
enum class CmdClientStatus {

View File

@@ -21,13 +21,20 @@ using ::basalt::presenter::cmd_client::CmdClient;
using ::basalt::presenter::stopwatch::Stopwatch;
int main(int argc, char* argv[]) {
spdlog::info("Finding plugins...");
auto engine_dll = DllLoader(DllKind::Engine, BSTEXT("BasaltDirectX11Engine"));
auto deliver_dll = DllLoader(DllKind::Deliver, BSTEXT("BasaltPipeDeliver"));
auto client = CmdClient();
spdlog::info("Waiting BasaltTrainer...");
auto payload = client.wait_handshake();
spdlog::info("BasaltTrainer Requirements:");
spdlog::info(BSTEXT("\tEngine: {}"), payload.engine_name);
spdlog::info(BSTEXT("\tDeliver: {}"), payload.delivery_name);
spdlog::info(BSTEXT("\tObject Loader: {}"), payload.object_loader_name);
spdlog::info(BSTEXT("\tAnime Loader: {}"), payload.anime_loader_name);
spdlog::info("Finding plugins...");
auto engine_dll = DllLoader(DllKind::Engine, payload.engine_name);
auto deliver_dll = DllLoader(DllKind::Deliver, payload.delivery_name);
auto object_loader_dll = DllLoader(DllKind::ObjectLoader, payload.object_loader_name);
auto anime_loader_dll = DllLoader(DllKind::AnimeLoader, payload.anime_loader_name);
spdlog::info("Allocating resources...");
auto* engine = engine_dll.create_instance<IEngine>();

View File

@@ -44,14 +44,30 @@ namespace basalt::shared::pipe_operator {
write(&buffer, sizeof(TPod));
}
void read_string(std::string& buffer) {
size_t length = 0;
read_pod(length);
std::uint32_t raw_length = 0;
read_pod(raw_length);
auto length = static_cast<std::size_t>(raw_length);
buffer.resize(length);
read(buffer.data(), length);
read(buffer.data(), length * sizeof(std::string::value_type));
}
void write_string(std::string_view& buffer) {
write_pod(buffer.size());
write(buffer.data(), buffer.size());
void write_string(const std::string_view& buffer) {
auto length = buffer.size();
auto raw_length = static_cast<std::uint32_t>(length);
write_pod(raw_length);
write(buffer.data(),length * sizeof(std::string_view::value_type));
}
void read_bsstring(char_types::BSString& buffer) {
std::uint32_t raw_length = 0;
read_pod(raw_length);
auto length = static_cast<std::size_t>(raw_length);
buffer.resize(length);
read(buffer.data(), length * sizeof(char_types::BSString::value_type));
}
void write_bsstring(const char_types::BSStringView& buffer) {
auto length = buffer.size();
auto raw_length = static_cast<std::uint32_t>(length);
write_pod(raw_length);
write(buffer.data(), length * sizeof(char_types::BSStringView::value_type));
}
private: