57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
|
|
#include <cstring>
|
|
#include <expected>
|
|
#include <iostream>
|
|
#include <span>
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
#include <testconnect.hpp>
|
|
#include <nethandler.hpp>
|
|
#include <rpcheader.hpp>
|
|
|
|
|
|
TestConnector::TestConnector(NetHandler& hand) {
|
|
handler = &hand;
|
|
}
|
|
|
|
std::expected<int, std::string> TestConnector::Write(std::string reqNetPacket) {
|
|
std::stringstream ss(reqNetPacket);
|
|
// Read binary header
|
|
std::string reqRawHeader;
|
|
const int rhSize = 8;
|
|
reqRawHeader.resize(rhSize);
|
|
ss.read(reqRawHeader.data(), rhSize);
|
|
// Decode header
|
|
RPCHeader reqHeader;
|
|
reqHeader.Decode(reqRawHeader);
|
|
// Read protobuf packet
|
|
std::string reqData;
|
|
auto pSize = reqHeader.PacketSize();
|
|
reqData.resize(pSize);
|
|
ss.read(reqData.data(), pSize);
|
|
// Call handler
|
|
std::string resData;
|
|
handler->Handle(reqData, resData);
|
|
// Pack result
|
|
std::string resNetPacket;
|
|
RPCHeader resHeader(resData.size());
|
|
resNetPacket.append(resHeader.Encode());
|
|
resNetPacket.append(resData);
|
|
|
|
backss << resNetPacket;
|
|
auto size = backss.tellp();
|
|
return reqNetPacket.size();
|
|
}
|
|
|
|
std::expected<int, std::string> TestConnector::Read(std::string& resData, int size) {
|
|
resData.resize(size);
|
|
auto r = backss.readsome(resData.data(), size);
|
|
return r;
|
|
}
|
|
|
|
TestConnector::~TestConnector() {}
|
|
|