From c6964d5af25d4ec7ed9dbe7674dc4e3896b36ead Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期五, 16 四月 2021 16:10:02 +0800 Subject: [PATCH] node remove mq if never registered; refactor. --- src/socket.h | 33 +++++++++++++-------------------- 1 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/socket.h b/src/socket.h index 96af6e7..dbb161c 100644 --- a/src/socket.h +++ b/src/socket.h @@ -57,6 +57,7 @@ ShmSocket(Shm &shm, const int len = 12); ~ShmSocket(); static bool Remove(SharedMemory &shm, const MQId &id) { return Queue::Remove(shm, id); } + bool Remove() { return Remove(shm(), id()); } const MQId &id() const { return mq().Id(); } // start recv. bool Start(int nworker = 1, const RecvCB &onData = RecvCB(), const IdleCB &onIdle = IdleCB()); @@ -66,32 +67,24 @@ size_t Pending() const { return mq().Pending(); } template <class Body> - bool Send(const void *valid_remote, const BHMsgHead &head, const Body &body) + bool Send(const void *valid_remote, const BHMsgHead &head, const Body &body, const RecvCB &cb = RecvCB()) { - MsgI msg; - if (msg.Make(shm(), head, body)) { - DEFER1(if (msg.IsCounted()) { msg.Release(shm()); }); - return SendImpl(valid_remote, msg); - } - return false; - } - - template <class Body> - bool Send(const void *valid_remote, const BHMsgHead &head, const Body &body, const RecvCB &cb) - { - //TODO send_buffer_ need flag, and remove callback on expire. MsgI msg; if (msg.Make(shm(), head, body)) { DEFER1(if (msg.IsCounted()) { msg.Release(shm()); }); std::string msg_id(head.msg_id()); - per_msg_cbs_->Add(msg_id, cb); - auto onExpireRemoveCB = [this, msg_id](MsgI const &msg) { - RecvCB cb_no_use; - per_msg_cbs_->Find(msg_id, cb_no_use); - }; - return SendImpl(valid_remote, msg, onExpireRemoveCB); + if (!cb) { + return SendImpl(valid_remote, msg); + } else { + per_msg_cbs_->Add(msg_id, cb); + auto onExpireRemoveCB = [this, msg_id](MsgI const &msg) { + RecvCB cb_no_use; + per_msg_cbs_->Find(msg_id, cb_no_use); + }; + return SendImpl(valid_remote, msg, onExpireRemoveCB); + } } else { - printf("out of mem?, avail: %ld\n", shm().get_free_memory()); + SetLastError(ENOMEM, "Out of mem"); } return false; } -- Gitblit v1.8.0