🏷️ 自定义网络协议ID
大约 2 分钟
自定义网络协议ID
由于KBEngine中的网络协议ID都由系统自动生成,如果不是用配套的SDK将很难与服务端对接协议。
因此KBE提供了一种机制允许用户自定义网络协议的ID。
这在某些情况下是比较好用的(例如: 传统协议对接方式都会有一个协议表,客户端匹配协议表中的协议然后解析)
该配置位于kbe/res/server/messages_fixed_defaults.xml
中。

看看一个协议是怎么构成的?
<Client::onRemoteMethodCall>
<id>506</id>
<descr>调用一个远程方法。</descr>
<arg>INT32</arg> <!-- entityID -->
<arg>UINT16</arg> <!-- 方法ID -->
<arg>UINT8_ARRAY</arg> <!-- 方法参数二进制流, 具体由方法来解析 -->
</Client::onRemoteMethodCall>
Client::onRemoteMethodCall
: 协议的作用域, Client表示客户端的协议,onRemoteMethodCall为协议接口的名称。id
: int,协议的ID。descr
: string,协议的描述。只是为了开发者做一个描述,并无实际用处。arg
: 每个arg代表一个参数,第一个arg则为第一个参数,以此类推。arg内填写的是参数的类别。
提示
作用域可选的还有:Machine、Loginapp、Baseapp、Cellapp、Base、Entity、Proxy、Logger、Property、Baseappmgr、Cellappmgr、Dbmgr、Interfaces。
自定义一个协议:
参考上面协议的构成,我们很容易就可以自定义一个协议。注:请确保已了解引擎的通讯协议的格式,详情见《通讯协议格式》一文。
假设,我们给客户端上增加一个协议onDoSomething:
<Client::onDoSomething>
<id>10000</id>
<descr>调用一个远程方法。</descr>
<arg>INT32</arg> <!-- entityID -->
<arg>UINT16</arg> <!-- 方法ID -->
<arg>UINT8_ARRAY</arg> <!-- 方法参数二进制流, 具体由方法来解析 -->
</Client::onDoSomething>
OK,完成了!如果在Baseapp上的协议,则把Client改成Baseapp即可。