lichao
2021-04-06 bb9a7e348892eb5c4fccb063380aa6fcd9612b71
src/socket.h
@@ -37,6 +37,7 @@
   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);
@@ -44,22 +45,27 @@
   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();