/*
|
* =====================================================================================
|
*
|
* 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"
|
|
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_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(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);
|
|
#undef BHOME_SIMPLE_MAP_MSG
|
#undef BHOME_MAP_MSG_AND_TYPE
|
|
template <class Msg>
|
constexpr inline bhome::msg::MsgType GetType(const Msg &)
|
{
|
return MsgToType<Msg>::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 <class Reply = MsgCommonReply>
|
inline Reply MakeReply(const ErrorCode err_code, const std::string &err_str = "")
|
{
|
Reply msg;
|
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);
|
// inline void AddRoute(BHMsgHead &head, const MQId &id) { head.add_route()->set_mq_id(&id, sizeof(id)); }
|
|
#endif // end of include guard: PROTO_UA9UWKL1
|