using System; using System.Net; using System.Net.Sockets; namespace ET.Client { public static class LoginHelper { public static async ETTask Login(Scene clientScene, string account, string password) { try { // 创建一个ETModel层的Session clientScene.RemoveComponent<RouterAddressComponent>(); clientScene.RemoveComponent<NetClientComponent>(); clientScene.RemoveComponent<SessionComponent>(); // 获取路由跟realmDispatcher地址 RouterAddressComponent routerAddressComponent = clientScene.AddComponent<RouterAddressComponent, string, int>(ConstValue.RouterHttpHost, ConstValue.RouterHttpPort); await routerAddressComponent.Init(); clientScene.AddComponent<NetClientComponent, AddressFamily>(routerAddressComponent.RouterManagerIPAddress.AddressFamily); IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(account); // 登录验证 R2C_Login r2CLogin; using (Session session = clientScene.GetComponent<NetClientComponent>().Create(realmAddress)) // using (Session session = await RouterHelper.CreateRouterSession(clientScene, realmAddress)) { r2CLogin = (R2C_Login) await session.Call(new C2R_Login() { Account = account, Password = password }); } if (r2CLogin.Error != ErrorCode.ERR_Success) { Log.Error($"登陆验证错误...errCode={r2CLogin.Error}"); return; } // 创建一个game Session,并且保存到SessionComponent中 Session gameSession = clientScene.GetComponent<NetClientComponent>().Create(NetworkHelper.ToIPEndPoint(r2CLogin.Address)); // Session gameSession = await RouterHelper.CreateRouterSession(clientScene, NetworkHelper.ToIPEndPoint(r2CLogin.Address)); // 登录game G2C_LoginGame g2CLoginGame = (G2C_LoginGame)await gameSession.Call( new C2G_LoginGame() { Key = r2CLogin.Key, GameId = r2CLogin.GameId}); if (g2CLoginGame.Error != ErrorCode.ERR_Success) { Log.Error($"登陆game错误...errCode={g2CLoginGame.Error}"); return; } if (ConstValue.SessionTimeoutTime > 0 && gameSession.GetComponent<SessionIdleCheckerComponent>() == null) { gameSession.AddComponent<SessionIdleCheckerComponent>(); } // 保存账号信息 clientScene.AddComponent<SessionComponent>().Session = gameSession; clientScene.GetComponent<RoleInfoComponment>().ClearRoleInfo(); clientScene.GetComponent<RoleInfoComponment>().SetRoleInfo(g2CLoginGame); Log.Debug("登陆game成功!"); await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish()); } catch (Exception e) { Log.Error($"登陆出错...{e.Message}"); } } } }