diff options
Diffstat (limited to 'fnet/src/examples/frt/rpc')
-rw-r--r-- | fnet/src/examples/frt/rpc/rpc_callback_client.cpp | 11 | ||||
-rw-r--r-- | fnet/src/examples/frt/rpc/rpc_callback_server.cpp | 15 | ||||
-rw-r--r-- | fnet/src/examples/frt/rpc/rpc_server.cpp | 6 |
3 files changed, 23 insertions, 9 deletions
diff --git a/fnet/src/examples/frt/rpc/rpc_callback_client.cpp b/fnet/src/examples/frt/rpc/rpc_callback_client.cpp index 801de59b515..7c6434e870a 100644 --- a/fnet/src/examples/frt/rpc/rpc_callback_client.cpp +++ b/fnet/src/examples/frt/rpc/rpc_callback_client.cpp @@ -26,7 +26,7 @@ RPC::Init(FRT_Supervisor *s) { FRT_ReflectionBuilder rb(s); //------------------------------------------------------------------- - rb.DefineMethod("prod", "", "", true, + rb.DefineMethod("prod", "", "", FRT_METHOD(RPC::Prod), this); //------------------------------------------------------------------- } @@ -45,6 +45,7 @@ MyApp::Main() printf("usage : rpc_server <connectspec>\n"); return 1; } + bool ok = true; RPC rpc; FRT_Supervisor orb; rpc.Init(&orb); @@ -63,6 +64,7 @@ MyApp::Main() printf("[error(%d): %s]\n", req->GetErrorCode(), req->GetErrorMessage()); + ok = false; } printf("invokeCnt: %d\n", rpc.invokeCnt); @@ -76,6 +78,7 @@ MyApp::Main() printf("[error(%d): %s]\n", req->GetErrorCode(), req->GetErrorMessage()); + ok = false; } printf("invokeCnt: %d\n", rpc.invokeCnt); @@ -89,14 +92,18 @@ MyApp::Main() printf("[error(%d): %s]\n", req->GetErrorCode(), req->GetErrorMessage()); + ok = false; } printf("invokeCnt: %d\n", rpc.invokeCnt); + if (rpc.invokeCnt != 3) { + ok = false; + } req->SubRef(); target->SubRef(); orb.ShutDown(true); - return 0; + return ok ? 0 : 1; } diff --git a/fnet/src/examples/frt/rpc/rpc_callback_server.cpp b/fnet/src/examples/frt/rpc/rpc_callback_server.cpp index 33207282bcc..ac7b34ebda0 100644 --- a/fnet/src/examples/frt/rpc/rpc_callback_server.cpp +++ b/fnet/src/examples/frt/rpc/rpc_callback_server.cpp @@ -2,6 +2,7 @@ #include <vespa/fnet/frt/frt.h> #include <vespa/fastos/app.h> +#include <thread> #include <vespa/log/log.h> LOG_SETUP("rpc_callback_server"); @@ -12,9 +13,7 @@ struct RPC : public FRT_Invokable void Init(FRT_Supervisor *s); }; -void -RPC::CallBack(FRT_RPCRequest *req) -{ +void do_callback(FRT_RPCRequest *req) { FNET_Connection *conn = req->GetConnection(); FRT_RPCRequest *cb = new FRT_RPCRequest(); cb->SetMethodName(req->GetParams()->GetValue(0)._string._str); @@ -25,6 +24,14 @@ RPC::CallBack(FRT_RPCRequest *req) cb->GetErrorMessage()); } cb->SubRef(); + req->Return(); +} + +void +RPC::CallBack(FRT_RPCRequest *req) +{ + req->Detach(); + std::thread(do_callback, req).detach(); } void @@ -32,7 +39,7 @@ RPC::Init(FRT_Supervisor *s) { FRT_ReflectionBuilder rb(s); //------------------------------------------------------------------- - rb.DefineMethod("callBack", "s", "", false, + rb.DefineMethod("callBack", "s", "", FRT_METHOD(RPC::CallBack), this); //------------------------------------------------------------------- } diff --git a/fnet/src/examples/frt/rpc/rpc_server.cpp b/fnet/src/examples/frt/rpc/rpc_server.cpp index 8947663216e..03d618133c9 100644 --- a/fnet/src/examples/frt/rpc/rpc_server.cpp +++ b/fnet/src/examples/frt/rpc/rpc_server.cpp @@ -28,21 +28,21 @@ RPCServer::InitRPC(FRT_Supervisor *s) { FRT_ReflectionBuilder rb(s); //------------------------------------------------------------------- - rb.DefineMethod("concat", "ss", "s", true, + rb.DefineMethod("concat", "ss", "s", FRT_METHOD(RPCServer::RPC_concat), this); rb.MethodDesc("Concatenate two strings"); rb.ParamDesc("string1", "a string"); rb.ParamDesc("string2", "another string"); rb.ReturnDesc("ret", "the concatenation of string1 and string2"); //------------------------------------------------------------------- - rb.DefineMethod("addFloat", "ff", "f", true, + rb.DefineMethod("addFloat", "ff", "f", FRT_METHOD(RPCServer::RPC_addFloat), this); rb.MethodDesc("Add two floats"); rb.ParamDesc("float1", "a float"); rb.ParamDesc("float2", "another float"); rb.ReturnDesc("ret", "float1 + float2"); //------------------------------------------------------------------- - rb.DefineMethod("addDouble", "dd", "d", true, + rb.DefineMethod("addDouble", "dd", "d", FRT_METHOD(RPCServer::RPC_addDouble), this); rb.MethodDesc("Add two doubles"); rb.ParamDesc("double1", "a double"); |