Files
Олег Бородин eda9b8986b working commit
2026-05-05 11:37:10 +02:00

45 lines
1.1 KiB
C++

#include <cstring>
#include <expected>
#include <iostream>
#include <span>
#include <string>
#include <vector>
#include <sstream>
#include <google/protobuf/message.h>
#include <control.pb.h>
#include <rpcclient.hpp>
#include <msgheader.hpp>
#include <netclient.hpp>
RPCClient::RPCClient(NetClient& iconnector) {
connector = &iconnector;
}
std::expected<void, std::string> RPCClient::DoTransaction(const pbMessage& pbReq, pbMessage& pbRes) {
std::string rawRequest;
pbReq.SerializeToString(&rawRequest);
MessageHeader reqHeader(rawRequest.size());
auto rawReqHeader = reqHeader.Encode();
std::string reqPacket;
reqPacket.append(rawReqHeader);
reqPacket.append(rawRequest);
connector->Write(reqPacket);
const int headerSize = rpcHeaderSize;
std::string rawResHeader;
connector->Read(rawResHeader, headerSize);
MessageHeader resHeader;
resHeader.Decode(rawResHeader);
std::string rawResponse;
connector->Read(rawResponse, resHeader.PacketSize());
pbRes.ParseFromString(rawResponse);
return {};
}