/* * ===================================================================================== * * 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(shm, &BHTopicCenterAddress(), 1000); sockets_["bus"] = std::make_shared(shm, &BHTopicBusAddress(), 1000); for (auto &kv : Centers()) { sockets_[kv.first] = std::make_shared(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; }