diff options
Diffstat (limited to 'src/Rpc.cpp')
-rw-r--r-- | src/Rpc.cpp | 39 |
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 |