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(); // 获取路由跟realmDispatcher地址 RouterAddressComponent routerAddressComponent = clientScene.GetComponent(); if (routerAddressComponent == null) { routerAddressComponent = clientScene.AddComponent(ConstValue.RouterHttpHost, ConstValue.RouterHttpPort); await routerAddressComponent.Init(); clientScene.AddComponent(routerAddressComponent.RouterManagerIPAddress.AddressFamily); } IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(account); // 登陆验证 R2C_Login r2CLogin; using (Session session = await RouterHelper.CreateRouterSession(clientScene, realmAddress)) { r2CLogin = (R2C_Login)await session.Call(new C2R_Login() { Account = account, Password = MD5Helper.StringMD5(password) }); } if (r2CLogin.Error != ErrorCode.ERR_Success) { Log.Debug($"登陆验证错误...errCode={r2CLogin.Error}"); return r2CLogin.Error; } // 创建一个gate Session,并且保存到SessionComponent中 Session gateSession = await RouterHelper.CreateRouterSession(clientScene, NetworkHelper.ToIPEndPoint(r2CLogin.Address[0])); // 登陆gate G2C_LoginGame g2CLoginGate = (G2C_LoginGame)await gateSession.Call(new C2G_LoginGame() { Token = r2CLogin.Token, UserId = r2CLogin.UserId }); if (g2CLoginGate.Error != ErrorCode.ERR_Success) { Log.Debug($"登陆game错误...errCode={g2CLoginGate.Error}"); return g2CLoginGate.Error; } // 保存账号信息 clientScene.AddComponent().Session = gateSession; var accountComponet = clientScene.AddComponent(); accountComponet.Token = r2CLogin.Token; accountComponet.UserId = r2CLogin.UserId; Log.Debug($"登陆game成功...token={r2CLogin.Token}, userId={r2CLogin.UserId}"); //var player = g2CLoginGate.Players[0]; //TODO:选角进入 //使用简化流程直接进入游戏 var ret = (G2C_BindPlayer)await gateSession.Call(new C2G_BindPlayer() { PlayerId = 0 }); await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish() { player = ret.Player}); } catch (Exception e) { Log.Error($"登陆出错...{e.Message}"); return ErrorCode.ERR_LoginError; } return ErrorCode.ERR_Success; } } }