标签:
服务器用 C++ 搞得,消息协议分两种,定长消息和变长消息。游戏的消息协议都不复杂:包头,玩家ID,玩家数据。
// 消息头
struct Base {
int size;
int id;
Base(int _id, int _size)
: id(_id), size(_size)
{}
};
// 常见的一个消息
struct RoleMsg : public Base {
enum { ID = 0x001 };
int PlayerID;
RoleProps prop;
RoleMsg()
: Base(ID, sizeof(*this))
, PlayerID(0)
{}
}
每定义一个新的普通消息,都需要写上七八行代码。这些消息的结构都是差不多的,我们可以利用 template 简化定义消息的过程。
// 模板消息
template <typename T, unsigned I>
struct StructTPL : public Base {
int CharID;
T prop;
StructTPL()
: Base(I, sizeof(*this))
{}
};
// 普通消息
typedef StructTPL <RoleProps, 0x1> RoleMsg;
typedef StructTPL <T2, 0x2> T2Msg;
typedef StructTPL <T3, 0x3> T2Msg;
利用模板,一行就可以定义一个新消息,比原来简单很多。
同样道理,变长消息也可以利用模板定义,就不用详细说明了。
标签:
原文地址:http://www.cnblogs.com/liutengda/p/4462729.html