#include #include #include #include #include #include #include #include #include #include #include #include RPCClient::RPCClient(NetClient& iconnector) { connector = &iconnector; } std::expected RPCClient::DoTransaction(const pbMessage& pbReq, pbMessage& pbRes) { std::string rawRequest; pbReq.SerializeToString(&rawRequest); RPCHeader reqHeader(rawRequest.size()); auto rawReqHeader = reqHeader.Encode(); std::string reqPacket; reqPacket.append(rawReqHeader); reqPacket.append(rawRequest); connector->Write(reqPacket); const int headerSize = 8; std::string rawResHeader; connector->Read(rawResHeader, headerSize); RPCHeader resHeader; resHeader.Decode(rawResHeader); std::string rawResponse; connector->Read(rawResponse, resHeader.PacketSize()); pbRes.ParseFromString(rawResponse); return {}; }