kbengine通讯协议

来源:互联网 发布:像素数据技术 编辑:程序博客网 时间:2024/05/01 11:50

通讯协议格式

客户端想要与KBEngine进行通讯需要与KBEngine使用相同的协议,KBEngine通讯协议分为如下两种类型:

确定长度类型:

 |-----------------------------------------------------------------|Packet = |      Len: 2Bytes            |            Len: N                 | |     (Message-ID: uint16)    |   (Message-Body: Binary-stream)   | |-----------------------------------------------------------------|

不固定长度类型:

 |--------------------------------------------------------------------------------------------|Packet = |      Len: 2Bytes            |       Len: 2Bytes          |           Len: N                | |     (Message-ID: uint16)    |   (Message-Length: uint16) |   (Message-Body: Binary-stream) | |--------------------------------------------------------------------------------------------|

(注意: 如果消息长度超过65534,Message-Length固定被填充为65535,协议层会在Message-Length区段之后再额外增加4字节,来描述更大的长度信息)(注意: 测试协议请关闭数据包加密, 修改kbengine.xml或kbengine_defs.xml->channelCommon->encrypt_type)


举列一:

void client_funcXX(uint8 p1, int64 p2)     ...     ...void server_funcXXX()packet.newMessage(ClientInterface::client_funcXX);packet.writeUint8(1);packet.writeInt64(1); |--------------------------------------------------------------------------------|Packet = |      Len: 2Bytes                                |            Len: 1, 8         | |     (Message-ID(client_funcXX): uint16)         |       (Message-Body: p1, p2) | |--------------------------------------------------------------------------------|

举列二:

void client_funcXX(uint8 p1, int64 p2, string p3)     ...     ...void server_funcXXX()packet.newMessage(ClientInterface::client_funcXX);packet.writeUint8(1);packet.writeInt64(1);packet.writeString("123456"); |--------------------------------------------------------------------------------------------|Packet = |      Len: 2Bytes            |       Len: 2Bytes          |           Len: 1, 8, 7          | |     (Message-ID: uint16)    |   (Message-Length: uint16) |   (Message-Body: p1, p2, p3)    | |--------------------------------------------------------------------------------------------|

对接服务端引擎级协议

以下协议为客户端需要提供给服务端调用的协议:

onVersionNotMatch引擎版本不匹配onScriptVersionNotMatch脚本版本不匹配onKicked客户端被服务端踢出onImportServerErrorsDescr导入服务端错误码描述表回调onImportClientEntityDef导入服务端entitydef描述表回调onImportClientMessages导入客户端协议表回调onHelloCB与服务端握手回调onLoginFailed登录loginapp失败了onLoginSuccessfully登录loginapp成功了onLoginGatewayFailed登录baseapp失败了onReLoginGatewayFailed重登录baseapp失败了onCreatedProxies服务端通知客户端创建一个能与服务端通讯的代理实体onUpdatePropertysOptimized更新entity属性(优化的)onUpdatePropertys更新entity属性(非优化的)onRemoteMethodCallOptimized服务端调用entity的方法(优化的)onRemoteMethodCall服务端调用entity的方法(非优化的)onEntityEnterWorldentity进入世界, entity第一次在cellapp上的被创建onEntityLeaveWorldentity离开世界了(非优化的)onEntityLeaveWorldOptimizedentity离开世界了(优化的)onEntityEnterSpaceentity进入空间了(进入了cellapp中的场景或者副本房间等)onEntityLeaveSpaceentity离开空间了onCreateAccountResult创建账号返回结果initSpaceData当entity进入某个空间后,服务端初始化空间数据setSpaceData服务端设置空间数据delSpaceData服务端删除空间数据onEntityDestroyed某个entity销毁了onUpdateBasePos服务端更新客户端player基础位置(x, y, z)onUpdateBasePosXZ服务端更新客户端player基础位置(x, z)onSetEntityPosAndDir服务端设置客户端player位置和朝向onUpdateData_***服务端更新客户端player位置(x, y, z)或朝向(yaw, pitch, roll)onStreamDataStarted流数据开始下载(streamFileToClient, streamStringToClient)onStreamDataRecv接收到流数据onStreamDataCompleted流数据下载完成onReqAccountResetPasswordCB请求重置账号密码回调onReqAccountBindEmailCB请求绑定账号E-MAIL回调onReqAccountNewPasswordCB请求账号新密码回调(忘记密码类功能)

以下为服务端允许客户端调用的协议:

loginapp:hello客户端请求与loginapp握手onClientActiveTick客户端向服务端发送tick心跳login请求登录loginappimportClientMessages请求从loginapp导入引擎协议importServerErrorsDescr请求导入服务端错误描述表reqAccountResetPassword请求重置账号的密码reqCreateAccount请求创建账号baseapp:hello客户端请求与baseapp握手onClientActiveTick客户端向服务端发送tick心跳loginGateway请求登录网关baseappimportClientMessages请求从baseapp导入引擎级协议importClientEntityDef请求从baseapp导入脚本定义产生的协议reLoginGateway请求重登陆baseapp(断线重连)reqAccountBindEmail请求绑定账号E-MAILreqAccountNewPassword请求账号新密码(忘记密码类功能)onUpdateDataFromClient更新客户端数据到服务端(player的位置,朝向等)onRemoteMethodCall客户端请求调用服务端baseapp-entity方法onRemoteCallCellMethodFromClient客户端请求调用服务端cellapp-entity方法

0 0
原创粉丝点击