zoukankan      html  css  js  c++  java
  • kbengine通讯协议

    通讯协议格式

    客户端想要与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.xmlkbengine_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的方法(非优化的)
    
    onEntityEnterWorld
    	
    	entity进入世界, entity第一次在cellapp上的被创建
    
    onEntityLeaveWorld
    	
    	entity离开世界了(非优化的)
    
    onEntityLeaveWorldOptimized
    	
    	entity离开世界了(优化的)
    
    onEntityEnterSpace
    	
    	entity进入空间了(进入了cellapp中的场景或者副本房间等)
    
    onEntityLeaveSpace
    	
    	entity离开空间了
    
    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
    		请求登录loginapp
    
    	importClientMessages
    		请求从loginapp导入引擎协议
    
    	importServerErrorsDescr
    		请求导入服务端错误描述表
    
    	reqAccountResetPassword
    		请求重置账号的密码
    
    	reqCreateAccount
    		请求创建账号
    
    baseapp:
    	hello
    		客户端请求与baseapp握手
    
    	onClientActiveTick
    		客户端向服务端发送tick心跳
    
    	loginGateway
    		请求登录网关baseapp
    
    	importClientMessages
    		请求从baseapp导入引擎级协议
    
    	importClientEntityDef
    		请求从baseapp导入脚本定义产生的协议
    
    	reLoginGateway
    		请求重登陆baseapp(断线重连)
    
    	reqAccountBindEmail
    		请求绑定账号E-MAIL
    
    	reqAccountNewPassword
    		请求账号新密码(忘记密码类功能)
    
    	onUpdateDataFromClient
    		更新客户端数据到服务端(player的位置,朝向等)
    
    	onRemoteMethodCall
    		客户端请求调用服务端baseapp-entity方法
    
    	onRemoteCallCellMethodFromClient
    		客户端请求调用服务端cellapp-entity方法
    
     
  • 相关阅读:
    窗体吸附 Timer + 判断Location (简单实用)
    C# FTP 应用程序
    C# 加密方法汇总
    LINQ 标准的查询操作符 合计操作符 Count()、Sum()、Min()、Max()、Average()和Aggregate()
    委托中的协变和逆变(C# 编程指南)
    深入探讨C#序列化和反序列化
    grep 命令详解
    Oracle 数据库的启动和关闭的方式!
    linux 下的光盘拷贝
    C3P0连接池配置
  • 原文地址:https://www.cnblogs.com/txbabys/p/4137048.html
Copyright © 2011-2022 走看看