finish representer protocol
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user