| | |
| | | |
| | | #include "bhome_msg.pb.h" |
| | | #include "bhome_msg_api.pb.h" |
| | | #include <chrono> |
| | | |
| | | using namespace bhome::msg; |
| | | using namespace bhome_msg; |
| | | |
| | | template <class Msg> |
| | | struct MsgToType { |
| | | }; |
| | | |
| | | #define BHOME_MAP_MSG_AND_TYPE(mSG, tYPE) \ |
| | | template <> \ |
| | | struct MsgToType<mSG> { \ |
| | | static const bhome::msg::MsgType value = tYPE; \ |
| | | #define BHOME_MAP_MSG_AND_TYPE(mSG, tYPE) \ |
| | | template <> \ |
| | | struct MsgToType<mSG> { \ |
| | | static const MsgType value = tYPE; \ |
| | | }; |
| | | |
| | | #define BHOME_SIMPLE_MAP_MSG(name) BHOME_MAP_MSG_AND_TYPE(Msg##name, kMsgType##name) |
| | | |
| | | BHOME_SIMPLE_MAP_MSG(CommonReply); |
| | | BHOME_SIMPLE_MAP_MSG(Register); |
| | | BHOME_SIMPLE_MAP_MSG(Unregister); |
| | | BHOME_SIMPLE_MAP_MSG(RegisterRPC); |
| | | BHOME_SIMPLE_MAP_MSG(Heartbeat); |
| | | BHOME_SIMPLE_MAP_MSG(QueryTopic); |
| | |
| | | BHOME_SIMPLE_MAP_MSG(Publish); |
| | | BHOME_SIMPLE_MAP_MSG(Subscribe); |
| | | BHOME_SIMPLE_MAP_MSG(Unsubscribe); |
| | | BHOME_SIMPLE_MAP_MSG(ProcInit); |
| | | BHOME_SIMPLE_MAP_MSG(ProcInitReply); |
| | | BHOME_SIMPLE_MAP_MSG(QueryProc); |
| | | BHOME_SIMPLE_MAP_MSG(QueryProcReply); |
| | | |
| | | #undef BHOME_SIMPLE_MAP_MSG |
| | | #undef BHOME_MAP_MSG_AND_TYPE |
| | | |
| | | template <class Msg> |
| | | constexpr inline bhome::msg::MsgType GetType(const Msg &) |
| | | constexpr inline MsgType GetType(const Msg &) |
| | | { |
| | | return MsgToType<Msg>::value; |
| | | } |
| | |
| | | SetError(*msg.mutable_errmsg(), err_code, err_str); |
| | | return msg; |
| | | } |
| | | |
| | | BHMsgHead InitMsgHead(const MsgType type, const std::string &proc_id, const std::string &msgid); |
| | | BHMsgHead InitMsgHead(const MsgType type, const std::string &proc_id); |
| | | std::string NewMsgId(); |
| | | BHMsgHead InitMsgHead(const MsgType type, const std::string &proc_id, const uint64_t ssn_id, const std::string &msgid); |
| | | BHMsgHead InitMsgHead(const MsgType type, const std::string &proc_id, const uint64_t ssn_id); |
| | | // inline void AddRoute(BHMsgHead &head, const MQId &id) { head.add_route()->set_mq_id(&id, sizeof(id)); } |
| | | inline bool IsSuccess(const ErrorCode ec) { return ec == eSuccess; } |
| | | bool IsMsgExpired(const BHMsgHead &head); |
| | | |
| | | inline int64_t CountSeconds(const std::chrono::steady_clock::time_point tp) |
| | | { |
| | | return std::chrono::duration_cast<std::chrono::seconds>(tp.time_since_epoch()).count(); |
| | | } |
| | | inline int64_t NowSec() |
| | | { |
| | | return CountSeconds(std::chrono::steady_clock::now()); |
| | | } |
| | | |
| | | #endif // end of include guard: PROTO_UA9UWKL1 |