#include #include #include #include #include #include #include #include #include #include #include #include class FakeHandler : public NetHandler { public: std::expected Handle(std::string& req, std::string& res) override; }; std::expected FakeHandler::Handle(std::string& rawReq, std::string& rawRes) { control::HelloRequest pbReq; pbReq.ParseFromString(rawReq); std::cout << std::format("rpcName: {}\n", pbReq.meta().rpcname()); std::cout << std::format("req message: {}\n", pbReq.message()); control::HelloResult pbRes; pbRes.set_message("Johnny!"); auto resMeta = pbRes.mutable_meta(); resMeta->set_error(false); pbRes.SerializeToString(&rawRes); return {}; } int main(int argc, char** argv) { FakeHandler handler; FakeConnector conn(handler); control::HelloRequest pbReq; auto reqMeta = pbReq.mutable_meta(); reqMeta->set_rpcname("getHello"); pbReq.set_message("Whats your name?"); std::string rawReq; pbReq.SerializeToString(&rawReq); RPCHeader reqHeader(rawReq.size()); auto rawHeader = reqHeader.Encode(); std::string reqPacket; reqPacket.append(rawHeader); reqPacket.append(rawReq); conn.Write(reqPacket); // Read binary header std::string resRawHeader; const int rhSize = 8; auto rSize = conn.Read(resRawHeader, rhSize); RPCHeader resHeader; resHeader.Decode(resRawHeader); auto pSize = resHeader.PacketSize(); std::string resData; rSize = conn.Read(resData, pSize); control::HelloResult pbRes; pbRes.ParseFromString(resData); std::cout << std::format("res message: {}\n", pbRes.message()); std::cout << std::format("error: {}\n", pbRes.meta().error()); }