| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- using System;
- using GFGGame;
- namespace ET
- {
- public static class LoginHelper
- {
- public static async ETTask<int> LoginTest(Scene zoneScene, string address, string account)
- {
- A2C_LoginAccount a2CLoginAccount = null;
- Session accountSession = null;
- try
- {
- accountSession = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(address));
- a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_LoginTest()
- {
- Account = account,
- Version = GameConst.SERVER_VERSION,
- ChannelId = 101,
- PlatformId = 1,
- });
- }
- catch (Exception e)
- {
- accountSession?.Dispose();
- //Log.Debug(e.ToString());
- Log.Debug("机器人 account : " + account + ",无密码登陆报错,报错为:" + e.ToString());
- return ErrorCode.ERR_NetWorkError;
- }
- if (a2CLoginAccount.Error != ErrorCode.ERR_Success)
- {
- accountSession?.Dispose();
- Log.Debug("机器人 account : " + account + ",无密码登陆失败,A2C_LoginAccount返回值为:" + a2CLoginAccount.Error);
- return a2CLoginAccount.Error;
- }
- zoneScene.AddComponent<SessionComponent>().Session = accountSession;
- accountSession.AddComponent<PingComponent>();
- AccountInfoComponent accountInfoComponent = zoneScene.AddComponent<AccountInfoComponent>();
- accountInfoComponent.Token = a2CLoginAccount.Token;
- accountInfoComponent.AccountId = a2CLoginAccount.AccountId;
- accountInfoComponent.Account = account;
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- //获取服务器列表--并且根据索引写死一个CurrentServerId
- public static async ETTask<int> GetServerInfos(Scene zoneScene)
- {
- A2C_GetServerInfos a2C_GetServerInfos = null;
- try
- {
- 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)
- {
- //Log.Error(e.ToString());
- Log.Error("有个机器人请求协议A2C_GetServerInfos获取服务器列表报错,报错为:" + e.ToString());
- return ErrorCode.ERR_NetWorkError;
- }
- if (a2C_GetServerInfos.Error != ErrorCode.ERR_Success)
- {
- Log.Error("有个机器人请求协议A2C_GetServerInfos获取服务器列表失败,返回值为:" + a2C_GetServerInfos.Error);
- return a2C_GetServerInfos.Error;
- }
- zoneScene.AddComponent<ServerInfosComponent>();
- foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
- {
- //直接
- ServerInfo serverInfo = zoneScene.GetComponent<ServerInfosComponent>().AddChild<ServerInfo>();
- serverInfo.FromMessage(serverInfoProto);
- zoneScene.GetComponent<ServerInfosComponent>().ServerInfosList.Add(serverInfo);
- }
- zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId = Game.Options.ServerId;
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- //获取角色信息--选中第一个角色--机器人角色
- public static async ETTask<int> GetRoles(Scene zoneScene)
- {
- A2C_GetRoles a2C_GetRoles = null;
- try
- {
- a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
- new C2A_GetRoles()
- {
- AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
- Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
- ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
- });
- }
- catch (Exception e)
- {
- Log.Error("zone A2C_GetRoles,error:" + e.ToString());
- return ErrorCode.ERR_NetWorkError;
- }
- if (a2C_GetRoles.Error != ErrorCode.ERR_Success)
- {
- Log.Error("zone A2C_GetRoles,teturn error:" + a2C_GetRoles.Error);
- return a2C_GetRoles.Error;
- }
- zoneScene.AddComponent<RoleInfosComponent>().RoleInfos.Clear();
- foreach (var roleInfoProto in a2C_GetRoles.RoleInfos)
- {
- RoleInfo roleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
- roleInfo.FromMessage(roleInfoProto);
- zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(roleInfo);
- AllRoleInfoComponent.Instance.AddRole(roleInfo);
- }
- //选中第一个角色索引
- if (a2C_GetRoles.RoleInfos != null && a2C_GetRoles.RoleInfos.Count > 0)
- {
- zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId = a2C_GetRoles.RoleInfos[0].Id;
- }
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- //创角
- public static async ETTask<int> CreateRole(Scene zoneScene, string name)
- {
- A2C_CreateRole a2C_CreateRole = null;
- try
- {
- a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
- new C2A_CreateRole
- {
- AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
- Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
- Name = name,
- ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
- });
- }
- catch (Exception e)
- {
- Log.Error(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<RoleInfosComponent>().AddChild<RoleInfo>();
- newRoleInfo.FromMessage(a2C_CreateRole.RoleInfo);
- zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(newRoleInfo);
- AllRoleInfoComponent.Instance.AddRole(newRoleInfo);
- //创建好角色,再次给机器人一个角色
- zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId = newRoleInfo.RoleInfoId;
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- public static async ETTask<int> GetRealmKey(Scene zoneScene)
- {
- A2C_GetRealmKey a2C_GetRealmKey = null;
- try
- {
- a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
- new C2A_GetRealmKey()
- {
- AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
- Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
- ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
- });
- }
- catch (Exception e)
- {
- Log.Error(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<AccountInfoComponent>().RealmKey = a2C_GetRealmKey.RealmKey;
- zoneScene.GetComponent<AccountInfoComponent>().RealmAddress = a2C_GetRealmKey.RealmAddress;
- zoneScene.GetComponent<SessionComponent>().Disconnect();
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- public static async ETTask<int> EnterGame(Scene zoneScene)
- {
- string realmAddress = zoneScene.GetComponent<AccountInfoComponent>().RealmAddress;
- //1.连接Realm,获取分配的Gate
- R2C_LoginRealm r2C_LoginRealm = null;
- Session session = zoneScene.GetComponent<NetKcpComponent>()
- .Create(NetworkHelper.ToIPEndPoint(realmAddress));
- try
- {
- r2C_LoginRealm = (R2C_LoginRealm)await session.Call(new C2R_LoginRealm()
- {
- AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
- RealmTokenKey = zoneScene.GetComponent<AccountInfoComponent>().RealmKey
- });
- }
- catch (Exception e)
- {
- Log.Error(e);
- session?.Dispose();
- return ErrorCode.ERR_NetWorkError;
- }
- session?.Dispose();
- if (r2C_LoginRealm.Error != ErrorCode.ERR_Success)
- {
- return r2C_LoginRealm.Error;
- }
- Log.Warning($"GateAddress : {r2C_LoginRealm.GateAddress}");
- Session gateSession = zoneScene.GetComponent<NetKcpComponent>()
- .Create(NetworkHelper.ToIPEndPoint(r2C_LoginRealm.GateAddress));
- gateSession.AddComponent<PingComponent>();
- zoneScene.GetComponent<SessionComponent>().Session = gateSession;
- //2.开始连接Gate
- long currentRoleId =
- zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId; //要选角色,不然走到这里CurrentRoleId没值
- G2C_LoginGate g2C_LoginGate = null;
- try
- {
- long accountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId;
- g2C_LoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate()
- {
- Key = r2C_LoginRealm.GateSessionKey,
- AccountId = accountId,
- RoleId = currentRoleId
- });
- }
- catch (Exception e)
- {
- Log.Error(e);
- zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
- return ErrorCode.ERR_NetWorkError;
- }
- if (g2C_LoginGate.Error != ErrorCode.ERR_Success)
- {
- zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
- return g2C_LoginGate.Error;
- }
- Log.Debug("登陆gate成功!");
- //3.角色正式请求进入游戏逻辑服
- G2C_EnterGame g2C_EnterGame = null;
- try
- {
- g2C_EnterGame = (G2C_EnterGame)await gateSession.Call(new C2G_EnterGame() { });
- }
- catch (Exception e)
- {
- Log.Error(e);
- zoneScene.GetComponent<SessionComponent>().Session.Dispose();
- return ErrorCode.ERR_NetWorkError;
- }
- if (g2C_EnterGame.Error != ErrorCode.ERR_Success)
- {
- Log.Error(g2C_EnterGame.Error.ToString());
- return g2C_EnterGame.Error;
- }
- Log.Debug("角色进入游戏成功!");
- zoneScene.GetComponent<PlayerComponent>().MyId = g2C_EnterGame.MyId;
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- public static async ETTask<int> ReqGetLatestNotice(Scene zoneScene)
- {
- A2C_GetLatestNotice response = null;
- try
- {
- response = (A2C_GetLatestNotice)await zoneScene.GetComponent<SessionComponent>().Session
- ?.Call(new C2A_GetLatestNotice());
- }
- catch (Exception e)
- {
- Log.Error(e.ToString());
- return ErrorCode.ERR_NetWorkError;
- }
- if (response.Error != ErrorCode.ERR_Success)
- {
- Log.Error(response.Error.ToString());
- return response.Error;
- }
- await ETTask.CompletedTask;
- return ErrorCode.ERR_Success;
- }
- public static async ETTask<(int, string)> ReqRandomRoleName(Scene zoneScene)
- {
- A2C_GetRandomRoleName response = null;
- try
- {
- response = (A2C_GetRandomRoleName)await zoneScene.GetComponent<SessionComponent>().Session
- ?.Call(new C2A_GetRandomRoleName());
- }
- catch (Exception e)
- {
- Log.Debug(e.ToString());
- return (ErrorCode.ERR_NetWorkError, "");
- }
- if (response.Error != ErrorCode.ERR_Success)
- {
- Log.Debug(response.Error.ToString());
- return (ErrorCode.ERR_NetWorkError, "");
- }
- await ETTask.CompletedTask;
- return (ErrorCode.ERR_Success, response.Name);
- }
- }
- }
|