zhaoyang преди 3 години
родител
ревизия
85a17539d8

+ 18 - 5
GameClient/Assets/Game/HotUpdate/Controller/LoginController.cs

@@ -23,7 +23,7 @@ namespace GFGGame
         {
             ViewManager.Show<ModalStatusView>("登录中...");
             int errorCode = await ET.LoginHelper.Login(GameGlobal.zoneScene, ET.ConstValue.LoginAddress, account, password, isMD5);
-            
+
             if (errorCode == ET.ErrorCode.ERR_Success)
             {
                 GameGlobal.isVisitor = false;
@@ -51,7 +51,17 @@ namespace GFGGame
                 LocalCache.SetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, GameGlobal.isVisitor);
                 PlayerPrefs.Save();
                 await GetServerInfos();
-                await GetRoles();
+                ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
+
+                if (serverInfosComponent.ServerInfoList.Count > 1)
+                {
+                    ViewManager.Hide<ModalStatusView>();
+                    EventAgent.DispatchEvent(ConstMessage.SERVER_CHANGE, serverInfosComponent.CurrentServerId);
+                }
+                else
+                {
+                    await GetRoles();
+                }
             }
             else
             {
@@ -72,7 +82,7 @@ namespace GFGGame
         {
             ViewManager.Show<ModalStatusView>("注册中...");
             int errorCode = await LoginHelper.Register(GameGlobal.zoneScene, ET.ConstValue.LoginAddress, account, password, name, identityNum, code);
-            
+
             if (errorCode == ErrorCode.ERR_Success)
             {
                 Login(account, password).Coroutine();
@@ -104,8 +114,11 @@ namespace GFGGame
                 await ETTask.Create();
                 return;
             }
-            var serverInfo = serverInfosComponent.ServerInfoList[0];
-            serverInfosComponent.CurrentServerId = int.Parse(serverInfo.Id.ToString());
+            if (serverInfosComponent.CurrentServerId <= 0)
+            {
+                var serverInfo = serverInfosComponent.ServerInfoList[0];
+                serverInfosComponent.CurrentServerId = int.Parse(serverInfo.Id.ToString());
+            }
         }
 
         public static async ETTask GetRoles()

+ 25 - 24
GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Login/LoginHelper.cs

@@ -12,15 +12,15 @@ namespace ET
             try
             {
                 session = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(address));
-                a2C_GetVersion = (A2C_CheckVersion)await session.Call(new C2A_CheckVersion() { Version = version});
+                a2C_GetVersion = (A2C_CheckVersion)await session.Call(new C2A_CheckVersion() { Version = version });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 session?.Dispose();
                 Log.Error(e.ToString());
                 return ErrorCode.ERR_NetWorkError;
             }
-            if(a2C_GetVersion.Error != ErrorCode.ERR_Success)
+            if (a2C_GetVersion.Error != ErrorCode.ERR_Success)
             {
                 session?.Dispose();
                 return a2C_GetVersion.Error;
@@ -50,12 +50,12 @@ namespace ET
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(a2CLoginAccount.Error != ErrorCode.ERR_Success)
+            if (a2CLoginAccount.Error != ErrorCode.ERR_Success)
             {
                 accountSession?.Dispose();
                 return a2CLoginAccount.Error;
             }
-            if(zoneScene.GetComponent<SessionComponent>() == null)
+            if (zoneScene.GetComponent<SessionComponent>() == null)
             {
                 zoneScene.AddComponent<SessionComponent>();
             }
@@ -102,29 +102,30 @@ namespace ET
 
             try
             {
-                a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().Session.Call(new C2A_GetServerInfos() 
+                a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().Session.Call(new C2A_GetServerInfos()
                 {
                     AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
                     Token = zoneScene.GetComponent<AccountInfoComponent>().Token
                 });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e.ToString());
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(a2C_GetServerInfos.Error != ErrorCode.ERR_Success)
+            if (a2C_GetServerInfos.Error != ErrorCode.ERR_Success)
             {
                 return a2C_GetServerInfos.Error;
             }
 
-            foreach(var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
+            foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
             {
                 ServerInfo serverInfo = zoneScene.GetComponent<ServerInfosComponent>().AddChild<ServerInfo>();
                 serverInfo.FromMessage(serverInfoProto);
                 zoneScene.GetComponent<ServerInfosComponent>().Add(serverInfo);
             }
+            zoneScene.GetComponent<ServerInfosComponent>().SetRecentlyServerInfo(a2C_GetServerInfos.RecentId);
 
             await ETTask.CompletedTask;
             return ErrorCode.ERR_Success;
@@ -143,20 +144,20 @@ namespace ET
                     ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
                 });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e.ToString());
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(a2C_GetRoles.Error != ErrorCode.ERR_Success)
+            if (a2C_GetRoles.Error != ErrorCode.ERR_Success)
             {
                 Log.Error(a2C_GetRoles.Error.ToString());
                 return a2C_GetRoles.Error;
             }
 
             zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Clear();
-            foreach(var roleInfoProto in a2C_GetRoles.RoleInfos)
+            foreach (var roleInfoProto in a2C_GetRoles.RoleInfos)
             {
                 RoleInfo roleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
                 roleInfo.FromMessage(roleInfoProto);
@@ -204,7 +205,7 @@ namespace ET
 
             try
             {
-                a2C_DeleteRole = (A2C_DeleteRole) await zoneScene.GetComponent<SessionComponent>().Session.Call(new C2A_DeleteRole()
+                a2C_DeleteRole = (A2C_DeleteRole)await zoneScene.GetComponent<SessionComponent>().Session.Call(new C2A_DeleteRole()
                 {
                     AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
                     Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
@@ -218,7 +219,7 @@ namespace ET
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(a2C_DeleteRole.Error != ErrorCode.ERR_Success)
+            if (a2C_DeleteRole.Error != ErrorCode.ERR_Success)
             {
                 Log.Error(a2C_DeleteRole.Error.ToString());
                 return a2C_DeleteRole.Error;
@@ -244,13 +245,13 @@ namespace ET
                     ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
                 });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e.ToString());
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(a2C_GetRealmKey.Error != ErrorCode.ERR_Success)
+            if (a2C_GetRealmKey.Error != ErrorCode.ERR_Success)
             {
                 Log.Error(a2C_GetRealmKey.Error.ToString());
                 return a2C_GetRealmKey.Error;
@@ -279,7 +280,7 @@ namespace ET
                     RealmTokenKey = zoneScene.GetComponent<AccountInfoComponent>().RealmKey
                 });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e);
                 session?.Dispose();
@@ -287,7 +288,7 @@ namespace ET
             }
             session?.Dispose();
 
-            if(r2C_LoginRealm.Error != ErrorCode.ERR_Success)
+            if (r2C_LoginRealm.Error != ErrorCode.ERR_Success)
             {
                 return r2C_LoginRealm.Error;
             }
@@ -306,19 +307,19 @@ namespace ET
                 long accountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId;
                 g2C_LoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate()
                 {
-                    Key = r2C_LoginRealm.GateSessionKey, 
-                    AccountId = accountId, 
+                    Key = r2C_LoginRealm.GateSessionKey,
+                    AccountId = accountId,
                     RoleId = currentRoleId
                 });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e);
                 zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(g2C_LoginGate.Error != ErrorCode.ERR_Success)
+            if (g2C_LoginGate.Error != ErrorCode.ERR_Success)
             {
                 zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
                 return g2C_LoginGate.Error;
@@ -332,14 +333,14 @@ namespace ET
             {
                 g2C_EnterGame = (G2C_EnterGame)await gateSession.Call(new C2G_EnterGame() { });
             }
-            catch(Exception e)
+            catch (Exception e)
             {
                 Log.Error(e);
                 zoneScene.GetComponent<SessionComponent>().Session.Dispose();
                 return ErrorCode.ERR_NetWorkError;
             }
 
-            if(g2C_EnterGame.Error != ErrorCode.ERR_Success)
+            if (g2C_EnterGame.Error != ErrorCode.ERR_Success)
             {
                 Log.Error(g2C_EnterGame.Error.ToString());
                 return g2C_EnterGame.Error;

+ 8 - 2
GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/ServerInfo/ServerInfosComponentSystem.cs

@@ -4,7 +4,7 @@
     {
         public override void Destroy(ServerInfosComponent self)
         {
-            foreach(var serverInfo in self.ServerInfoList)
+            foreach (var serverInfo in self.ServerInfoList.Values)
             {
                 serverInfo?.Dispose();
             }
@@ -16,7 +16,13 @@
     {
         public static void Add(this ServerInfosComponent self, ServerInfo serverInfo)
         {
-            self.ServerInfoList.Add(serverInfo);
+            self.ServerInfoList.Add(serverInfo.Id, serverInfo);
+
+        }
+        public static void SetRecentlyServerInfo(this ServerInfosComponent self, long recentId)
+        {
+            self.recentlyServerInfo = self.ServerInfoList[recentId];
+            self.CurrentServerId = (int)recentId;
         }
     }
 }

+ 2 - 1
GameClient/Assets/Game/HotUpdate/ETCodes/Model/App/ServerInfo/ServerInfosComponent.cs

@@ -4,7 +4,8 @@ namespace ET
 {
     public class ServerInfosComponent : Entity, IAwake, IDestroy
     {
-        public List<ServerInfo> ServerInfoList = new List<ServerInfo>();
+        // public List<ServerInfo> ServerInfoList = new List<ServerInfo>();
+        public Dictionary<long, ServerInfo> ServerInfoList = new Dictionary<long, ServerInfo>();
 
         public int CurrentServerId = 1;
 

+ 20 - 10
GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs

@@ -63,11 +63,7 @@ namespace GFGGame
                 ViewManager.Show<LoginInputView>();
             }
             ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
-            if (serverInfosComponent.ServerInfoList.Count <= 1)
-            {
-                _ui.m_btnChange.visible = false;
-                return;
-            }
+
 
             ServerInfo recentlyServerInfo = serverInfosComponent.recentlyServerInfo;
             UpdateServer(recentlyServerInfo);
@@ -84,14 +80,20 @@ namespace GFGGame
         }
         private void UpdateServer(ServerInfo info)
         {
+            ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
+            if (serverInfosComponent.ServerInfoList.Count == 0)
+            {
+                _ui.m_btnChange.visible = false;
+                return;
+            }
+            _ui.m_btnChange.visible = serverInfosComponent.ServerInfoList.Count > 1;
             _ui.m_btnChange.title = string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)info.Id), info.ServerName);
         }
         private void OnSeverChangeListener(EventContext context)
         {
-            int index = (int)context.data;
             ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
 
-            UpdateServer(serverInfosComponent.ServerInfoList[index]);
+            UpdateServer(serverInfosComponent.ServerInfoList[serverInfosComponent.CurrentServerId]);
         }
         private void OnBtnChangeClick()
         {
@@ -102,11 +104,19 @@ namespace GFGGame
             ViewManager.Show<SystemNoticeView>();
         }
 
-        private void OnClickBtnStart()
+        private async void OnClickBtnStart()
         {
-            if (!GameController.CheckLoginCache(true))
+            var serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
+            if (serverInfosComponent.ServerInfoList.Count <= 0)
             {
-                ViewManager.Show<LoginInputView>();
+                if (!GameController.CheckLoginCache(true))
+                {
+                    ViewManager.Show<LoginInputView>();
+                }
+            }
+            else
+            {
+                await LoginController.GetRoles();
             }
         }
 

+ 9 - 6
GameClient/Assets/Game/HotUpdate/Views/Login/ServerListView.cs

@@ -1,3 +1,4 @@
+using System.Linq;
 using ET;
 using FairyGUI;
 using UI.Login;
@@ -39,6 +40,7 @@ namespace GFGGame
             ServerInfo recentlyServerInfo = serverInfosComponent.recentlyServerInfo;
             _ui.m_btnCurServer.m_txtTitle.text = string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)recentlyServerInfo.Id), recentlyServerInfo.ServerName);
             _ui.m_list.numItems = serverInfosComponent.ServerInfoList.Count;
+
         }
 
         protected override void OnHide()
@@ -49,15 +51,16 @@ namespace GFGGame
         private void ListItemRender(int index, GObject obj)
         {
             UI_Button2 item = UI_Button2.Proxy(obj);
-            item.m_txtTitle.text = string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)serverInfosComponent.ServerInfoList[index].Id), serverInfosComponent.ServerInfoList[index].ServerName);
-            item.target.data = index;
+            ServerInfo serverInfo = serverInfosComponent.ServerInfoList.ElementAt(index).Value;
+            item.m_txtTitle.text = string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)serverInfo.Id), serverInfo.ServerName);
+            if (serverInfo.Id == serverInfosComponent.CurrentServerId) item.target.selected = true;
+            item.target.data = serverInfo.Id;
         }
         private void OnListItemClick(EventContext context)
         {
-            GObject item = context.sender as GObject;
-            int index = (int)item.data;
-            serverInfosComponent.CurrentServerId = (int)serverInfosComponent.ServerInfoList[index].Id;
-            EventAgent.DispatchEvent(ConstMessage.SERVER_CHANGE, index);
+            long id = (long)(context.data as GObject).data;
+            serverInfosComponent.CurrentServerId = (int)id;
+            EventAgent.DispatchEvent(ConstMessage.SERVER_CHANGE);
         }
     }
 }