/*
|
* =====================================================================================
|
*
|
* Filename: msg.cpp
|
*
|
* Description:
|
*
|
* Version: 1.0
|
* Created: 2021年03月24日 16时48分42秒
|
* Revision: none
|
* Compiler: gcc
|
*
|
* Author: Li Chao (),
|
* Organization:
|
*
|
* =====================================================================================
|
*/
|
#include "msg.h"
|
#include "bh_util.h"
|
#include "defs.h"
|
#include "shm_socket.h"
|
|
namespace bhome_msg
|
{
|
|
ShmSocket &ShmMsg::Sender()
|
{
|
static auto &mq = GetCenterInfo(shm())->mq_sender_;
|
static ShmSocket sender(mq.offset_, shm(), mq.id_);
|
return sender;
|
}
|
|
int ShmMsg::Release()
|
{
|
if (!valid()) {
|
return 0;
|
}
|
auto n = meta()->count_.Dec();
|
if (n == 0) {
|
if (meta()->managed_) {
|
int64_t free_cmd = (id() << 4) | EncodeCmd(eCmdFree);
|
Sender().Send(BHTopicCenterAddress(), free_cmd);
|
} else {
|
Free();
|
}
|
} else if (n < 0) {
|
LOG_FATAL() << "error double release data.";
|
throw std::runtime_error("double release msg.");
|
}
|
return n;
|
}
|
|
void ShmMsg::Free()
|
{
|
assert(valid());
|
shm().Dealloc(meta());
|
offset_ = 0;
|
assert(!valid());
|
}
|
} // namespace bhome_msg
|