# Experimental RPC library ## Example ```cpp #include static AuSPtr gRpcServer = AuRPCNewInstance(); static AuSPtr gRpcClient = AuRPCNewInstance(); static AuSPtr gRpcClientChannel; void Run() { SysAssert(gRpcServer->StartServer(AuAsync::GetCurrentWorkerPId())); SysAssert(gRpcClient->StartClient(AuAsync::GetCurrentWorkerPId())); auto server = gRpcServer->ToServer(); auto handle = server->ExportString(); struct DummyService : AuIRPCService { AuUInt32 GetId() override { return 2; } void Dispatch(AuRPCResponse &response, AuUInt32 id, AuByteBuffer &buffer) override { AuLogDbg("ID = {}, bytes = {}", id, buffer.RemainingBytes()); response.message->Write("Hello World"); } }; server->RegisterService(AuMakeShared()); gRpcClientChannel = gRpcClient->Connect(handle); SysAssert(gRpcClientChannel); auto callback = AuMakeShared(); SysAssert(callback); callback->OnConnectFunctional = []() { auto request = AuRPCNewRequest(2, 3); SysAssert(request); auto callback = AuMakeShared(); SysAssert(callback); callback->OnResponseFunctional = [](const AuRPCResponse &res) { AuLogDbg("Complete! Message = {}", res.message->Read()); }; request->SetCallback(callback); gRpcClientChannel->SendRequest(request); }; gRpcClientChannel->SetCallbacks(callback); } ```