using System; using GFGGame; namespace ET { public static class LoginHelper { public static async ETTask LoginTest(Scene zoneScene, string address, string account) { A2C_LoginAccount a2CLoginAccount = null; Session accountSession = null; try { accountSession = zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(address)); a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_LoginTest() { Account = account, Version = GameConst.SERVER_VERSION, PlatformId = LauncherConfig.platformId, ChannelId = LauncherConfig.ChannelId }); } catch (Exception e) { accountSession?.Dispose(); Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2CLoginAccount.Error != ErrorCode.ERR_Success) { accountSession?.Dispose(); return a2CLoginAccount.Error; } OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, account); return ErrorCode.ERR_Success; } public static async ETTask Login(Scene zoneScene, string address, string account, string password, bool isMD5) { A2C_LoginAccount a2CLoginAccount = null; Session accountSession = null; try { accountSession = zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(address)); var passwordMD5 = password; //密码禁止明文传输 if (!isMD5) { passwordMD5 = MD5Helper.stringMD5(password); } a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_LoginAccount() { Account = account, Password = passwordMD5, Version = GameConst.SERVER_VERSION, PlatformId = LauncherConfig.platformId, ChannelId = LauncherConfig.ChannelId }); } catch (Exception e) { accountSession?.Dispose(); Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2CLoginAccount.Error != ErrorCode.ERR_Success) { accountSession?.Dispose(); return a2CLoginAccount.Error; } OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, account); return ErrorCode.ERR_Success; } public static void OnLoginSuccess(Scene zoneScene, A2C_LoginAccount a2CLoginAccount, Session accountSession, string account) { zoneScene.GetComponent().AccountSession = accountSession; accountSession.AddComponent(); accountSession.AddComponent(); zoneScene.GetComponent().SessionState = SessionState.Login; AccountInfoComponent accountInfoComponent = zoneScene.GetComponent(); accountInfoComponent.Token = a2CLoginAccount.Token; accountInfoComponent.AccountId = a2CLoginAccount.AccountId; accountInfoComponent.Account = account; accountInfoComponent.Age = a2CLoginAccount.Age; } public static async ETTask Register(Scene zoneScene, string address, string account, string password, string name, string identityNum, string code) { A2C_Register r2C_Register = null; Session session = null; try { session = zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(address)); { //密码禁止明文传输 var passwordMD5 = MD5Helper.stringMD5(password); r2C_Register = (A2C_Register)await session.Call(new C2A_Register() { Account = account, Password = passwordMD5, Name = name, IdentityNum = identityNum, Code = code, PlatformId = LauncherConfig.platformId, ChannelId = LauncherConfig.ChannelId }); if (r2C_Register.Error != ErrorCode.ERR_Success) { return r2C_Register.Error; } } } catch (Exception e) { session?.Dispose(); Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } return ErrorCode.ERR_Success; } public static async ETTask GetServerInfos(Scene zoneScene) { A2C_GetServerInfos a2C_GetServerInfos = null; try { a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent().AccountSession?.Call(new C2A_GetServerInfos() { AccountId = zoneScene.GetComponent().AccountId, Token = zoneScene.GetComponent().Token }); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2C_GetServerInfos.Error != ErrorCode.ERR_Success) { return a2C_GetServerInfos.Error; } zoneScene.GetComponent()?.ServerInfoList?.Clear(); foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList) { ServerInfo serverInfo = zoneScene.GetComponent().AddChild(); serverInfo.FromMessage(serverInfoProto); zoneScene.GetComponent().Add(serverInfo); } zoneScene.GetComponent().SetRecentlyServerInfo(a2C_GetServerInfos.RecentId); await ETTask.CompletedTask; return ErrorCode.ERR_Success; } public static async ETTask GetRoles(Scene zoneScene) { A2C_GetRoles a2C_GetRoles = null; try { a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent().AccountSession.Call(new C2A_GetRoles() { AccountId = zoneScene.GetComponent().AccountId, Token = zoneScene.GetComponent().Token, ServerId = zoneScene.GetComponent().CurrentServerId, }); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2C_GetRoles.Error != ErrorCode.ERR_Success) { //Log.Error(a2C_GetRoles.Error.ToString()); return a2C_GetRoles.Error; } zoneScene.GetComponent().RoleInfos.Clear(); foreach (var roleInfoProto in a2C_GetRoles.RoleInfos) { RoleInfo roleInfo = zoneScene.GetComponent().AddChild(); roleInfo.FromMessage(roleInfoProto); zoneScene.GetComponent().RoleInfos.Add(roleInfo); } return ErrorCode.ERR_Success; } public static async ETTask CreateRole(Scene zoneScene, string name) { A2C_CreateRole a2C_CreateRole = null; try { a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent().AccountSession?.Call(new C2A_CreateRole { AccountId = zoneScene.GetComponent().AccountId, Token = zoneScene.GetComponent().Token, Name = name, ServerId = zoneScene.GetComponent().CurrentServerId, }); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2C_CreateRole.Error != ErrorCode.ERR_Success) { //Log.Error(a2C_CreateRole.Error.ToString()); return a2C_CreateRole.Error; } RoleInfo newRoleInfo = zoneScene.GetComponent().AddChild(); newRoleInfo.FromMessage(a2C_CreateRole.RoleInfo); zoneScene.GetComponent().RoleInfos.Add(newRoleInfo); return ErrorCode.ERR_Success; } public static async ETTask DeleteRole(Scene zoneScene, long roleId) { A2C_DeleteRole a2C_DeleteRole = null; try { a2C_DeleteRole = (A2C_DeleteRole)await zoneScene.GetComponent().AccountSession?.Call(new C2A_DeleteRole() { AccountId = zoneScene.GetComponent().AccountId, Token = zoneScene.GetComponent().Token, RoleInfoId = roleId, ServerId = zoneScene.GetComponent().CurrentServerId, }); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2C_DeleteRole.Error != ErrorCode.ERR_Success) { //Log.Error(a2C_DeleteRole.Error.ToString()); return a2C_DeleteRole.Error; } int index = zoneScene.GetComponent().RoleInfos.FindIndex((info) => { return info.Id == a2C_DeleteRole.DeleteRoleInfoId; }); zoneScene.GetComponent().RoleInfos.RemoveAt(index); await ETTask.CompletedTask; return ErrorCode.ERR_Success; } public static async ETTask GetRealmKey(Scene zoneScene) { A2C_GetRealmKey a2C_GetRealmKey = null; try { a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent().AccountSession?.Call(new C2A_GetRealmKey() { AccountId = zoneScene.GetComponent().AccountId, Token = zoneScene.GetComponent().Token, ServerId = zoneScene.GetComponent().CurrentServerId, }); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (a2C_GetRealmKey.Error != ErrorCode.ERR_Success) { //Log.Error(a2C_GetRealmKey.Error.ToString()); return a2C_GetRealmKey.Error; } zoneScene.GetComponent().RealmKey = a2C_GetRealmKey.RealmKey; zoneScene.GetComponent().RealmAddress = a2C_GetRealmKey.RealmAddress; await ETTask.CompletedTask; return ErrorCode.ERR_Success; } public static async ETTask EnterGame(Scene zoneScene) { string realmAddress = zoneScene.GetComponent().RealmAddress; //1.连接Realm,获取分配的Gate R2C_LoginRealm r2C_LoginRealm = null; Session session = zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(realmAddress)); try { r2C_LoginRealm = (R2C_LoginRealm)await session.Call(new C2R_LoginRealm() { AccountId = zoneScene.GetComponent().AccountId, RealmTokenKey = zoneScene.GetComponent().RealmKey }); } catch (Exception e) { Log.Debug(e.ToString()); session?.Dispose(); return ErrorCode.ERR_NetWorkError; } session?.Dispose(); if (r2C_LoginRealm.Error != ErrorCode.ERR_Success) { return r2C_LoginRealm.Error; } LogUtil.LogDev($"GateAddress : {r2C_LoginRealm.GateAddress}"); Session gateSession = zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(r2C_LoginRealm.GateAddress)); gateSession.AddComponent(); gateSession.AddComponent(); zoneScene.GetComponent().GateSession = gateSession; zoneScene.GetComponent().SessionState = SessionState.Gate; //2.开始连接Gate long currentRoleId = zoneScene.GetComponent().CurrentRoleId; G2C_LoginGate g2C_LoginGate = null; try { long accountId = zoneScene.GetComponent().AccountId; g2C_LoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate() { Key = r2C_LoginRealm.GateSessionKey, AccountId = accountId, RoleId = currentRoleId }); } catch (Exception e) { Log.Debug(e.ToString()); zoneScene.GetComponent().GateSession?.Dispose(); return ErrorCode.ERR_NetWorkError; } if (g2C_LoginGate.Error != ErrorCode.ERR_Success) { zoneScene.GetComponent().GateSession?.Dispose(); return g2C_LoginGate.Error; } LogUtil.LogDev("登陆gate成功!"); //3.角色正式请求进入游戏逻辑服 G2C_EnterGame g2C_EnterGame = null; try { g2C_EnterGame = (G2C_EnterGame)await gateSession.Call(new C2G_EnterGame() { }); } catch (Exception e) { Log.Debug(e.ToString()); zoneScene.GetComponent().GateSession.Dispose(); return ErrorCode.ERR_NetWorkError; } if (g2C_EnterGame.Error != ErrorCode.ERR_Success) { //Log.Error(g2C_EnterGame.Error.ToString()); return g2C_EnterGame.Error; } zoneScene.GetComponent().MyId = g2C_EnterGame.MyId; await GameGlobal.zoneScene.GetComponent().Wait(); LogUtil.LogDev("角色进入游戏成功!"); zoneScene.GetComponent().DisconnectAccount(); return ErrorCode.ERR_Success; } public static async ETTask ReqGetLatestNotice() { A2C_GetLatestNotice response = null; try { response = (A2C_GetLatestNotice)await GameGlobal.zoneScene.GetComponent().AccountSession?.Call(new C2A_GetLatestNotice()); } catch (Exception e) { Log.Debug(e.ToString()); return ErrorCode.ERR_NetWorkError; } if (response.Error != ErrorCode.ERR_Success) { //Log.Error(response.Error.ToString()); return response.Error; } NoticeInfo noticeInfo = new NoticeInfo(); noticeInfo.noticeId = response.NoticeId; noticeInfo.title = response.Title; noticeInfo.time = response.TimeSec * 1000; noticeInfo.content = response.Content; NoticeDataManager.Instance.LastNoticeInfo = noticeInfo; return ErrorCode.ERR_Success; } public static async ETTask<(int, string)> ReqRandomRoleName() { A2C_GetRandomRoleName response = null; bool notLogin = false; Session accountSession = GameGlobal.zoneScene.GetComponent().AccountSession; if (accountSession == null || accountSession.IsDisposed) { notLogin = true; accountSession = GameGlobal.zoneScene.GetComponent().Create(NetworkHelper.ToIPEndPoint(GameConfig.LoginAddress)); } try { response = (A2C_GetRandomRoleName)await accountSession?.Call(new C2A_GetRandomRoleName() { ServerId = GameGlobal.zoneScene.GetComponent().CurrentServerId }); } catch (Exception e) { Log.Debug(e.ToString()); if (notLogin) { accountSession?.Dispose(); } return (ErrorCode.ERR_NetWorkError, ""); } if (response.Error != ErrorCode.ERR_Success) { //Log.Error(response.Error.ToString()); if (notLogin) { accountSession?.Dispose(); } return (ErrorCode.ERR_NetWorkError, ""); } if (notLogin) { accountSession?.Dispose(); } return (ErrorCode.ERR_Success, response.Name); } } }