| | |
| | | typedef bhome_shm::SharedMemory Shm; |
| | | typedef std::function<void(ShmSocket &sock, bhome_msg::MsgI &imsg, bhome_msg::BHMsg &msg)> RecvCB; |
| | | typedef std::function<void(bhome_msg::BHMsg &msg)> RecvBHMsgCB; |
| | | typedef std::function<void(ShmSocket &sock)> IdleCB; |
| | | |
| | | ShmSocket(Shm &shm, const void *id, const int len); |
| | | ShmSocket(Shm &shm, const int len = 12); |
| | |
| | | |
| | | Shm &shm() { return shm_; } |
| | | // start recv. |
| | | bool Start(const RecvCB &onData, int nworker = 1); |
| | | bool Start(const RecvCB &onData, const IdleCB &onIdle, int nworker = 1); |
| | | bool Start(const RecvCB &onData, int nworker = 1) { return Start(onData, IdleCB(), nworker); } |
| | | bool Start(const RecvBHMsgCB &onData, const IdleCB &onIdle, int nworker = 1) |
| | | { |
| | | return Start([onData](ShmSocket &sock, bhome_msg::MsgI &imsg, bhome_msg::BHMsg &msg) { onData(msg); }, onIdle, nworker); |
| | | } |
| | | bool Start(const RecvBHMsgCB &onData, int nworker = 1) |
| | | { |
| | | return Start([onData](ShmSocket &sock, bhome_msg::MsgI &imsg, bhome_msg::BHMsg &msg) { onData(msg); }, nworker); |
| | | return Start(onData, IdleCB(), nworker); |
| | | } |
| | | bool Stop(); |
| | | size_t Pending() const { return mq_ ? mq_->Pending() : 0; } |
| | | |
| | | bool SyncSend(const void *id, const bhome_msg::BHMsg &msg, const int timeout_ms); |
| | | bool SyncRecv(bhome_msg::BHMsg &msg, const int timeout_ms); |
| | | |
| | | protected: |
| | | const Shm &shm() const { return shm_; } |
| | | Queue &mq() { return *mq_; } // programmer should make sure that mq_ is valid. |
| | | const Queue &mq() const { return *mq_; } |
| | | std::mutex &mutex() { return mutex_; } |
| | | |
| | | bool SyncSend(const void *id, const bhome_msg::BHMsg &msg, const int timeout_ms); |
| | | bool SyncRecv(bhome_msg::BHMsg &msg, const int timeout_ms); |
| | | |
| | | private: |
| | | bool StopNoLock(); |