summaryrefslogtreecommitdiffstats
path: root/fnet/src/examples/frt/rpc/rpc_callback_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fnet/src/examples/frt/rpc/rpc_callback_client.cpp')
-rw-r--r--fnet/src/examples/frt/rpc/rpc_callback_client.cpp107
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);
+}