diff options
Diffstat (limited to 'fnet/src/examples/frt/rpc/rpc_callback_client.cpp')
-rw-r--r-- | fnet/src/examples/frt/rpc/rpc_callback_client.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/fnet/src/examples/frt/rpc/rpc_callback_client.cpp b/fnet/src/examples/frt/rpc/rpc_callback_client.cpp new file mode 100644 index 00000000000..479eb13fd43 --- /dev/null +++ b/fnet/src/examples/frt/rpc/rpc_callback_client.cpp @@ -0,0 +1,107 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("rpc_callback_client"); +#include <vespa/fnet/frt/frt.h> + + +struct RPC : public FRT_Invokable +{ + uint32_t invokeCnt; + RPC() : invokeCnt(0) {} + void Prod(FRT_RPCRequest *req); + void Init(FRT_Supervisor *s); +}; + +void +RPC::Prod(FRT_RPCRequest *req) +{ + (void) req; + ++invokeCnt; +} + +void +RPC::Init(FRT_Supervisor *s) +{ + FRT_ReflectionBuilder rb(s); + //------------------------------------------------------------------- + rb.DefineMethod("prod", "", "", true, + FRT_METHOD(RPC::Prod), this); + //------------------------------------------------------------------- +} + + +class MyApp : public FastOS_Application +{ +public: + virtual int Main(); +}; + +int +MyApp::Main() +{ + if (_argc < 2) { + printf("usage : rpc_server <connectspec>\n"); + return 1; + } + RPC rpc; + FRT_Supervisor orb; + rpc.Init(&orb); + orb.Start(); + + FRT_Target *target = orb.Get2WayTarget(_argv[1]); + FRT_RPCRequest *req = orb.AllocRPCRequest(); + + printf("invokeCnt: %d\n", rpc.invokeCnt); + + req->SetMethodName("callBack"); + req->GetParams()->AddString("prod"); + target->InvokeSync(req, 10.0); + + if(req->IsError()) { + printf("[error(%d): %s]\n", + req->GetErrorCode(), + req->GetErrorMessage()); + } + + printf("invokeCnt: %d\n", rpc.invokeCnt); + + req = orb.AllocRPCRequest(req); + req->SetMethodName("callBack"); + req->GetParams()->AddString("prod"); + target->InvokeSync(req, 10.0); + + if(req->IsError()) { + printf("[error(%d): %s]\n", + req->GetErrorCode(), + req->GetErrorMessage()); + } + + printf("invokeCnt: %d\n", rpc.invokeCnt); + + req = orb.AllocRPCRequest(req); + req->SetMethodName("callBack"); + req->GetParams()->AddString("prod"); + target->InvokeSync(req, 10.0); + + if(req->IsError()) { + printf("[error(%d): %s]\n", + req->GetErrorCode(), + req->GetErrorMessage()); + } + + printf("invokeCnt: %d\n", rpc.invokeCnt); + + req->SubRef(); + target->SubRef(); + orb.ShutDown(true); + return 0; +} + + +int +main(int argc, char **argv) +{ + MyApp myapp; + return myapp.Entry(argc, argv); +} |