/* * ===================================================================================== * * Filename: proto.h * * Description: * * Version: 1.0 * Created: 2021年04月07日 13时48分51秒 * Revision: none * Compiler: gcc * * Author: Li Chao (), lichao@aiotlink.com * Organization: * * ===================================================================================== */ #ifndef PROTO_UA9UWKL1 #define PROTO_UA9UWKL1 #include "bhome_msg.pb.h" #include "bhome_msg_api.pb.h" #include using namespace bhome_msg; template struct MsgToType { }; #define BHOME_MAP_MSG_AND_TYPE(mSG, tYPE) \ template <> \ struct MsgToType { \ 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(QueryTopicReply); BHOME_SIMPLE_MAP_MSG(RequestTopic); BHOME_SIMPLE_MAP_MSG(RequestTopicReply); 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 constexpr inline MsgType GetType(const Msg &) { return MsgToType::value; } inline void SetError(ErrorMsg &em, const ErrorCode err_code, const std::string &err_str = "") { em.set_errcode(err_code); if (!err_str.empty()) { em.set_errstring(err_str); } } template inline Reply MakeReply(const ErrorCode err_code, const std::string &err_str = "") { Reply msg; SetError(*msg.mutable_errmsg(), err_code, err_str); return msg; } 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(tp.time_since_epoch()).count(); } inline int64_t NowSec() { return CountSeconds(std::chrono::steady_clock::now()); } #endif // end of include guard: PROTO_UA9UWKL1