summaryrefslogtreecommitdiffstats
path: root/fnet/src/examples/frt/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'fnet/src/examples/frt/rpc')
-rw-r--r--fnet/src/examples/frt/rpc/rpc_callback_client.cpp11
-rw-r--r--fnet/src/examples/frt/rpc/rpc_callback_server.cpp15
-rw-r--r--fnet/src/examples/frt/rpc/rpc_server.cpp6
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");