目录

自定义网络协议ID

由于CBEngine中的网络协议ID都由系统自动生成,如果不是用配套的SDK将很难与服务端对接协议。

因此CBE提供了一种机制允许用户自定义网络协议的ID。

这在某些情况下是比较好用的(例如: 传统协议对接方式都会有一个协议表,客户端匹配协议表中的协议然后解析)

该配置位于kbe/res/server/messages_fixed_defaults.xml中。

1

看看一个协议是怎么构成的?

<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即可。


Copyright © 2018 Yolo Technologies. Publication: 2.0-025. Built: 2018-12-07.