/*
|
* =====================================================================================
|
*
|
* Filename: center.cpp
|
*
|
* Description:
|
*
|
* Version: 1.0
|
* Created: 2021年03月30日 16时19分37秒
|
* Revision: none
|
* Compiler: gcc
|
*
|
* Author: Li Chao (),
|
* Organization:
|
*
|
* =====================================================================================
|
*/
|
#include "center.h"
|
#include "defs.h"
|
#include "pubsub_center.h"
|
#include "reqrep_center.h"
|
#include "shm.h"
|
|
using namespace bhome_shm;
|
typedef BHCenter::MsgHandler Handler;
|
|
Handler Join(Handler h1, Handler h2)
|
{
|
return [h1, h2](ShmSocket &socket, bhome_msg::MsgI &imsg, bhome::msg::BHMsg &msg) {
|
return h1(socket, imsg, msg) || h2(socket, imsg, msg);
|
};
|
}
|
|
SharedMemory &BHomeShm()
|
{
|
static SharedMemory shm("bhome_default_shm_v0", 1024 * 1024 * 64);
|
return shm;
|
}
|
|
BHCenter::CenterRecords &BHCenter::Centers()
|
{
|
static CenterRecords rec;
|
return rec;
|
}
|
bool BHCenter::Install(const std::string &name, MsgHandler handler, const std::string &mqid, const int mq_len)
|
{
|
CenterRecords()[name] = CenterInfo{name, handler, mqid, mq_len};
|
}
|
|
BHCenter::BHCenter(Socket::Shm &shm)
|
{
|
sockets_["center"] = std::make_shared<ShmSocket>(shm, &BHTopicCenterAddress(), 1000);
|
sockets_["bus"] = std::make_shared<ShmSocket>(shm, &BHTopicBusAddress(), 1000);
|
for (auto &kv : Centers()) {
|
sockets_[kv.first] = std::make_shared<ShmSocket>(shm, kv.second.mqid_.data(), kv.second.mq_len_);
|
}
|
}
|
|
BHCenter::BHCenter() :
|
BHCenter(BHomeShm()) {}
|
|
bool BHCenter::Start()
|
{
|
auto onCenter = MakeReqRepCenter();
|
auto onBus = MakeBusCenter();
|
sockets_["center"]->Start(onCenter);
|
sockets_["bus"]->Start(onBus);
|
|
for (auto &kv : Centers()) {
|
sockets_[kv.first]->Start(kv.second.handler_);
|
}
|
return true;
|
// socket_.Start(Join(onCenter, onBus));
|
}
|
|
bool BHCenter::Stop()
|
{
|
for (auto &kv : sockets_) {
|
kv.second->Stop();
|
}
|
return true;
|
}
|