Skip to content

ProtoManager模块

zerlenzhang edited this page Mar 5, 2020 · 1 revision

CmdPackage包传输协议的body支持Json和Protobuf,开发时使用哪一项,需要提前初始化设置好,如果选择protobuf,会有更多需要注意的点。

ProtoManager.Init

  • 初始化

  • args:

    1. 【必须】协议类型,0-Json,1-Protobuf
    2. 【可选】如果选择protobuf,第二参数要传.proto文件所在目录绝对路径

local ProtoType={ Json=0, Protobuf=1, }; ProtoManager.Init(ProtoType.Protobuf,protofiledir);`

ProtoManager.RegisterCmdMap

  • 注册serviceType,cmdType和protobuf消息名的映射
  • args:
    1. cmdNameMap : 类型复杂,见示例

local ServiceType = require("ServiceType");

local cmdNameMap={};

cmdNameMap[ServiceType.Logic]={

`LoginLogicReq = 1,`

};

cmdNameMap[ServiceType.Auth]={

`UserLostConn = 0,`

`GuestLoginReq = 1,`

}

ProtoManager.RegisterCmdMap(cmdNameMap)

【为什么要这样?】

我们的底层在解析protobuf消息体的时候,会自动将之转化成Lua表,也会将Lua表自动转化成protobuf消息,

  • 所以,底层需要知道如何根据serviceType和cmdType判断解析成哪一种protobuf消息
  • 所以,上面字段名必须和.proto中message名一致
  • 所以,在发送CmdPackage时,stype,ctype和message类型要对应好