kbengine通讯协议
生活随笔
收集整理的這篇文章主要介紹了
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.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方法 ?轉載于:https://www.cnblogs.com/txbabys/p/4137048.html
總結
以上是生活随笔為你收集整理的kbengine通讯协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回答自己的提问
- 下一篇: 蓝桥杯java 算法训练 Torry的困