消息的定义

服务器进程之间会有大量的消息,如何有条理的定义消息是一个比较重要的问题。一种思路是按照每个服务器进程收到的消息进行区分,例如:

#pragma pack(1)

namespace MyCmd

{

    namespace FunctionCmd //表示function收到的消息,类似的可以定义scene收到的消息SceneCmd等。

    {

        namespace Cmd

        {

            enum {

                min_func_cmd = 100,

                cmd_test_scenefunction,

                ...

                max_func_cmd = 10000,

            };

        };

        struct CMD_DEC(cmd_test_scenefunction, FunctionCmd::Cmd) {

             int test = 0;

             int datasize = 0;

             unsigned char data[0];

             cmd_test_scenefunction(){}

             int get_cmd_size() {

                 return sizeof(*this) + datasize;

             }

         };

    };

};

#pragma pack()

其中CMD_DEC是个宏定义:

define CMD_DEC(cmd_name, namespace) \

cmd_name : public CmdTemplate<MyCmd::namespace::cmd_name>

其中CmdTemplate是个模板,定义如下:

template <int cmd>

struct CmdTemplate : public VoidCmd

{

    enum {

        cmdid = cmd

    };

    CmdTemplate() : VoidCmd(cmdid) {}

};

 

struct VoidCmd : public _void_cmd

{

    explicit VoidCmd(int cmdid) : _void_cmd(cmdid)

};

 

struct _void_cmd

{

    explicit _void_cmd(int cmdid) : _cmd_id(cmdid) {}

    int _cmd_id;//用来标识消息的id号

};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值