aboutsummaryrefslogtreecommitdiff
path: root/src/Rpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rpc.cpp')
-rw-r--r--src/Rpc.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Rpc.cpp b/src/Rpc.cpp
new file mode 100644
index 0000000..2bf54fb
--- /dev/null
+++ b/src/Rpc.cpp
@@ -0,0 +1,39 @@
+#include "../include/Rpc.hpp"
+#include <string>
+#include <cassert>
+
+namespace dchat
+{
+ Rpc::Rpc(u16 port) :
+ context(1),
+ socket(context, ZMQ_PAIR)
+ {
+ std::string addr = "tcp://*:";
+ addr += std::to_string(port);
+ socket.bind(addr);
+ }
+
+ void Rpc::recv(RpcRecvCallbackFunc recvCallbackFunc)
+ {
+ assert(recvCallbackFunc);
+ zmq::message_t request;
+ if(socket.recv(&request, ZMQ_NOBLOCK))
+ {
+ recvCallbackFunc(&request);
+ }
+ }
+
+ bool Rpc::send(const void *data, const usize size)
+ {
+ if(size == 0) return false;
+ try
+ {
+ return socket.send(data, size, ZMQ_NOBLOCK) > 0;
+ }
+ catch(zmq::error_t &e)
+ {
+ fprintf(stderr, "Rpc::send failed, reason: %s\n", e.what());
+ return false;
+ }
+ }
+} \ No newline at end of file