| | |
| | | |
| | | namespace nng_wrap { |
| | | |
| | | static thread_local std::string verbose_info{}; |
| | | #define TAG |
| | | #define PRNTVITAG(args) |
| | | |
| | | /* |
| | | #ifndef PRNTVITAG |
| | | static thread_local std::string verbose_info{}; |
| | | #define TAG do{ verbose_info.clear(); \ |
| | | verbose_info=string("function [")+__FUNCTION__+string("]"); \ |
| | | }while(0) |
| | | #define PRNTVITAG(msg) do{ \ |
| | | verbose_info+=string("-> (") + msg + string(")"); \ |
| | | }while(0) |
| | | // #define TAG |
| | | // #define PRNTVITAG(args) |
| | | #endif |
| | | */ |
| | | |
| | | ///////////////////////////////////////////////// |
| | | enum{ |
| | |
| | | URLHeartBeat, |
| | | }; |
| | | |
| | | static char* IPC_REGISTER = (char*)"ipc:///tmp/bhnng-center-reg.ipc"; //进程注册 |
| | | static char* IPC_UNREGISTER = (char*)"ipc:///tmp/bhnng-center-unregister.ipc"; //注销 |
| | | static char* IPC_REGTOPIC = (char*)"ipc:///tmp/bhnng-center-regtopic.ipc"; //注册主题 |
| | | static char* IPC_QUERYTOPIC = (char*)"ipc:///tmp/bhnng-center-querytopic.ipc"; //查询指定的主题 |
| | | static char* IPC_QUERYPROC = (char*)"ipc:///tmp/bhnng-center-queryproc.ipc"; //查询所有注册的进程 |
| | | static char* IPC_SUBLOCALTOPIC = (char*)"ipc:///tmp/bhnng-center-sublocaltopic.ipc"; //订阅本地主题 |
| | | static char* IPC_SUBNETTOPIC = (char*)"ipc:///tmp/bhnng-center-subnettopic.ipc"; //订阅网络主题 |
| | | static char* IPC_HEARTBEAT = (char*)"ipc:///tmp/bhnng-center-hb.ipc"; |
| | | static char* IPC_PUB_PROXY = (char*)"ipc:///tmp/bhnng-center-pub-proxy.ipc"; //这个是代理中心,用于接收待发布的消息 |
| | | static char* IPC_SUB_QUEUE = (char*)"ipc:///tmp/bhnng-center-sub-queue.ipc"; //这个是客户端从center订阅的通道 |
| | | static const char* IPC_REGISTER = (char*)"ipc:///tmp/bhnng-center-reg.ipc"; //进程注册 |
| | | static const char* IPC_UNREGISTER = (char*)"ipc:///tmp/bhnng-center-unregister.ipc"; //注销 |
| | | static const char* IPC_REGTOPIC = (char*)"ipc:///tmp/bhnng-center-regtopic.ipc"; //注册主题 |
| | | static const char* IPC_QUERYTOPIC = (char*)"ipc:///tmp/bhnng-center-querytopic.ipc"; //查询指定的主题 |
| | | static const char* IPC_QUERYPROC = (char*)"ipc:///tmp/bhnng-center-queryproc.ipc"; //查询所有注册的进程 |
| | | static const char* IPC_SUBLOCALTOPIC = (char*)"ipc:///tmp/bhnng-center-sublocaltopic.ipc"; //订阅本地主题 |
| | | static const char* IPC_SUBNETTOPIC = (char*)"ipc:///tmp/bhnng-center-subnettopic.ipc"; //订阅网络主题 |
| | | static const char* IPC_HEARTBEAT = (char*)"ipc:///tmp/bhnng-center-hb.ipc"; |
| | | static const char* IPC_PUB_PROXY = (char*)"ipc:///tmp/bhnng-center-pub-proxy.ipc"; //这个是代理中心,用于接收待发布的消息 |
| | | static const char* IPC_SUB_QUEUE = (char*)"ipc:///tmp/bhnng-center-sub-queue.ipc"; //这个是客户端从center订阅的通道 |
| | | |
| | | static const std::unordered_map<int, std::string> map_url{ |
| | | static const std::unordered_map<int, const char*> map_url{ |
| | | {URLReg, IPC_REGISTER}, |
| | | {URLDeReg, IPC_UNREGISTER}, |
| | | {URLRegTopic, IPC_REGTOPIC}, |
| | |
| | | {URLSubQueue, IPC_SUB_QUEUE}, |
| | | {URLHeartBeat, IPC_HEARTBEAT}, |
| | | }; |
| | | inline std::string get_url(const int type){ |
| | | inline const char* get_url(const int type){ |
| | | auto iter = map_url.find(type); |
| | | if (iter != map_url.end()){ |
| | | return iter->second; |
| | | } |
| | | return {}; |
| | | return NULL; |
| | | } |
| | | |
| | | template <class... T> struct make_void{typedef void type;}; |
| | |
| | | struct psmsg{ |
| | | DISABLE_COPY_AND_ASSIGN(psmsg); |
| | | psmsg(const std::string& t, std::string&& m) |
| | | :topic_(t),data_(std::move(m)){} |
| | | :topic_(t),data_(std::move(m)){} |
| | | psmsg(std::string&& t, std::string&& m) |
| | | :topic_(std::move(t)),data_(std::move(m)){} |
| | | std::string topic_{}; |
| | | std::string data_{}; |
| | | }; |
| | |
| | | }; |
| | | |
| | | enum { INIT, RECV, WAIT, SEND }; |
| | | enum { REPLY_IPC, REPLY_TCP }; |
| | | struct work { |
| | | int state{-1}; |
| | | nng_aio *aio{}; |
| | |
| | | nng_ctx ctx{}; |
| | | void(*cb_recv)(work*){}; |
| | | void* user_data{}; |
| | | int mode{-1}; |
| | | }; |
| | | |
| | | static const std::string rr_unblocking_msg_{"~!@#$%^&*()-=<<UNBLOCKING>>=-()*&^%$#@!~"}; |
| | |
| | | std::mutex mtx_msg_{}; |
| | | std::condition_variable cv_msg_{}; |
| | | |
| | | // std::deque<void*> q_src_{}; |
| | | }; |
| | | |
| | | template<class T, typename std::enable_if<is_default_c<T>::value, int>::type=0> |