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,string ip = ConstValue.RouterHttpHost,int port = ConstValue.RouterHttpPort) { try { // 创建一个ETModel层的Session clientScene.RemoveComponent(); clientScene.RemoveComponent(); clientScene.RemoveComponent(); // 获取路由跟realmDispatcher地址 RouterAddressComponent routerAddressComponent = clientScene.AddComponent(ip, port); await routerAddressComponent.Init(); clientScene.AddComponent(routerAddressComponent.RouterManagerIPAddress.AddressFamily); IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(account); // 登录验证 R2C_Login r2CLogin; using (Session session = clientScene.GetComponent().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().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() == null) { gameSession.AddComponent(); } // 保存账号信息 clientScene.AddComponent().Session = gameSession; clientScene.GetComponent().ClearRoleInfo(); clientScene.GetComponent().SetRoleInfo(g2CLoginGame); Log.Debug("登陆game成功!"); await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish()); } catch (Exception e) { Log.Error($"登陆出错...{e.Message}"); } } } }