1. 程式人生 > >KBEngine warring項目源碼閱讀(一) 項目簡介和註冊登錄

KBEngine warring項目源碼閱讀(一) 項目簡介和註冊登錄

urn 創建 ges input alt 接下來 F12 .com name

首先介紹下warring項目,是kbe自帶的一個演示示例,大部分人了解kbe引擎也是從warring項目開始的。

項目地址:https://github.com/kbengine/kbengine_unity3d_warring

項目截圖:

技術分享

技術分享

技術分享

技術分享

技術分享

項目的下載和安裝不再多說,現在開始進入代碼講解階段:

註冊:

技術分享

可以看到控件綁定代碼為reg_ok,點進去

 1 void reg_ok()
 2     {
 3         log_label.obj.text = "請求連接服務器...";
 4         log_label.obj.color = UnityEngine.Color.green;
5 6 if(reg_username.input.text == "" || reg_username.input.text.Length > 30) 7 { 8 log_label.obj.color = UnityEngine.Color.red; 9 log_label.obj.text = "用戶名或者郵箱地址不合法, 最大長度限制30個字符。"; 10 Common.WARNING_MSG("ui::reg_ok: invalid username!"
); 11 return; 12 } 13 14 if(reg_password.input.text.Length < 6 || reg_password.input.text.Length > 16) 15 { 16 log_label.obj.color = UnityEngine.Color.red; 17 log_label.obj.text = "密碼不合法, 長度限制在6~16位之間。"; 18 Common.WARNING_MSG("
ui::reg_ok: invalid reg_password!"); 19 return; 20 } 21 22 if(reg_password.input.text != reg_passwordok.input.text) 23 { 24 log_label.obj.color = UnityEngine.Color.red; 25 log_label.obj.text = "二次輸入密碼不匹配。"; 26 Common.WARNING_MSG("ui::reg_ok: reg_password != reg_passwordok!"); 27 return; 28 } 29 30 KBEngine.Event.fireIn("createAccount", reg_username.input.text, reg_passwordok.input.text, System.Text.Encoding.UTF8.GetBytes("kbengine_unity_warring")); 31 log_label.obj.text = "連接成功,等待處理請稍後..."; 32 }

  可以看到接下來是fireIn("createAccount",xxxx,...)

  這裏需要講解一下客戶端的fireIn和fireOut是怎麽一回事,fireIn是指u3d腳本層觸發一個事件給kbe插件執行,fireOut是是插件向u3d腳本層觸發的事件,總之是從unity到kbe插件的一個交互過程。既然是插件層層,那麽我們打開KBEngine.cs去找對應的registerIn,可以找到下面的代碼

 1         void installEvents()
 2         {
 3             Event.registerIn("createAccount", this, "createAccount");
 4             Event.registerIn("login", this, "login");
 5             Event.registerIn("reloginBaseapp", this, "reloginBaseapp");
 6             Event.registerIn("resetPassword", this, "resetPassword");
 7             Event.registerIn("bindAccountEmail", this, "bindAccountEmail");
 8             Event.registerIn("newPassword", this, "newPassword");
 9             
10             // 內部事件
11             Event.registerIn("_closeNetwork", this, "_closeNetwork");
12         }

然後在同一文件的第727行,找到對應的消息,可以看到下一步是調用的createAccount_loginapp(false)函數

技術分享

點開進去

 1         /*
 2             創建賬號,通過loginapp
 3         */
 4         public void createAccount_loginapp(bool noconnect)
 5         {
 6             if(noconnect)
 7             {
 8                 reset();
 9                 _networkInterface.connectTo(_args.ip, _args.port, onConnectTo_createAccount_callback, null);
10             }
11             else
12             {
13                 Bundle bundle = Bundle.createObject();
14                 bundle.newMessage(Message.messages["Loginapp_reqCreateAccount"]);
15                 bundle.writeString(username);
16                 bundle.writeString(password);
17                 //string imei = ‘AET89766-124‘;
18                 //bundle.writeString(imei);
19                 bundle.writeBlob(KBEngineApp.app._clientdatas);
20                 bundle.send(_networkInterface);
21             }
22         }

可以看到這裏開始給後端發了一個消息,消息關鍵字是Loginapp_reqCreateAccount。我們打開kbe的C++部分源碼

KBEngine warring項目源碼閱讀(一) 項目簡介和註冊登錄