using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class LoginManager : ManagerBase { public const uint DwVersionNo = 153518004; public readonly static string USER_ACCOUNT = Application.dataPath + "UserAccount"; public readonly static string USER_PASSWORD = Application.dataPath + "UserPassword"; public bool sdkLogined { get; set; } = false; public bool reconnectBackGround { get; set; } = false; public bool onCreateRole { get; set; } = false; public bool busy { get; set; } = false; int ServerListLoop = 200; //秒:在登录界面请求服务器列表的间隔 long LastLoopSecond = 0; //上一次的请求时间 100纳秒单位 public SDKUtils.FP_LoginOk sdkLoginResult; public SDKUtils.FP_CheckIDAuthentication sdkIDCheckIDAuthentication; public string localSaveAccountName { get { return LocalSave.GetString(USER_ACCOUNT); } set { LocalSave.SetString(USER_ACCOUNT, value); } } public event Action registerResultEvent; public event Action accountBindOkEvent; public event Action loginErrorEvent; //游戏启动后表格加载 模块加载失败的提示 public string loginErrorInfo; public string ipBuf { get; private set; } public int portBuf { get; private set; } public int gamePortBuf { get; private set; } public string accountBuf { get; private set; } public string passwordBuf { get; private set; } public bool isLogined { get; set; } public override void Init() { SDKUtils.Instance.onFreePlatformLoginOk += OnSDKAccountLoginOk; SDKUtils.Instance.onFreePlatformLogoutOk += OnSDKAccountLoginOutOk; SDKUtils.Instance.onFreePlatformBindOk += OnSDKAccountBindOk; LaunchInHot.Instance.OnApplicationOut += OnApplicationOut; } public override void Release() { SDKUtils.Instance.onFreePlatformLoginOk -= OnSDKAccountLoginOk; SDKUtils.Instance.onFreePlatformLogoutOk -= OnSDKAccountLoginOutOk; SDKUtils.Instance.onFreePlatformBindOk -= OnSDKAccountBindOk; LaunchInHot.Instance.OnApplicationOut -= OnApplicationOut; } private void OnSDKAccountLoginOk(SDKUtils.FP_LoginOk _result) { sdkLogined = true; sdkLoginResult = _result; if (!DebugUtility.Instance.isWhiteListAccount) { DebugUtility.Instance.RequestWhiteListAuthority(sdkLoginResult.account); } ServerListCenter.Instance.RequestServerListPlayer(sdkLoginResult.account); SDKUtils.Instance.MakeKeyAndVisible(); // TODO YYL // OperationLogCollect.Instance.RecordLauchEvent(5); GameNotice.OpenGameNotice(); } private void OnSDKAccountLoginOutOk() { sdkLogined = false; sdkLoginResult = default(SDKUtils.FP_LoginOk); GameNetSystem.Instance.LoginOut(); } private void OnSDKAccountBindOk() { sdkLoginResult.phone = 1; if (accountBindOkEvent != null) { accountBindOkEvent(); } } private void OnGetIDAuthenticationInfo(SDKUtils.FP_CheckIDAuthentication _info) { sdkIDCheckIDAuthentication = _info; } public void AccountLogin(string _account, string _ip, int _port, int _gamePort) { Debug.LogFormat("账号登录, account:{0} ; ip:{1} ; port:{2} ; gamePort:{3}", _account, _ip, _port, _gamePort); isLogined = true; if (Application.internetReachability == NetworkReachability.NotReachable) { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("L1116"), () => { } ); return; } if (busy) { return; } busy = true; try { reconnectBackGround = false; accountBuf = _account; localSaveAccountName = accountBuf; ipBuf = _ip; portBuf = _port; gamePortBuf = _gamePort; ConnectGameServer(ipBuf, gamePortBuf); GameNetSystem.Instance.OnAccountLogin(); NetLinkWin.Show(); } catch (Exception ex) { Debug.Log(ex); busy = false; } } public void AccountLogin(string _ip, int _port, int _gamePort) { if (sdkLogined) { AccountLogin(sdkLoginResult.account, _ip, _port, _gamePort); } else { SDKUtils.Instance.FreePlatformLogin(); } } public void ReAccountLogin() { if (busy) { return; } busy = true; reconnectBackGround = true; try { ConnectGameServer(ipBuf, gamePortBuf); NetLinkWin.Show(); } catch (Exception ex) { Debug.Log(ex); busy = false; } } private void OnAccountLogin(bool _ok, string _result) { if (!_ok) { busy = false; Debug.LogError(_result); NetLinkWin.Hide(); return; } if (string.IsNullOrEmpty(_result)) { busy = false; ServerTipDetails.DisplayNormalTip(Language.Get("L1117")); NetLinkWin.Hide(); return; } var stringSet = _result.Split('|'); if (stringSet[0] != "OK") { if (stringSet.Length > 1) { ServerTipDetails.DisplayNormalTip(stringSet[1]); } busy = false; NetLinkWin.Hide(); return; } localSaveAccountName = accountBuf; try { ConnectGameServer(ipBuf, gamePortBuf); } catch (Exception ex) { busy = false; Debug.Log(ex); } } void ConnectGameServer(string _ip, int _port) { GameNetSystem.Instance.BeginConnectGameServer(_ip, _port, OnGameServerConnected); } private void OnGameServerConnected(bool ok) { if (ok) { var sendInfo = new C0123_tagCClientPackVersion(); sendInfo.Version = DwVersionNo; GameNetSystem.Instance.SendInfo(sendInfo); } else { busy = false; } } public void AccessLogin(H0101_tagServerPrepared _serverInfo) { GameNetSystem.Instance.SendInfo(Get0101SendPackage(_serverInfo)); // 登录 } public void CheckClientVersion() { var sendInfo = new C010D_tagCClientVersion(); sendInfo.Version = "10.1000.1"; GameNetSystem.Instance.SendInfo(sendInfo); } private void OnApplicationOut() { var sendInfo = new C0103_tagCPlayerLogOut(); sendInfo.Type = 1; GameNetSystem.Instance.SendInfo(sendInfo); } public void RequestServerListLoop() { long nowTick = DateTime.Now.Ticks; if (LastLoopSecond == 0) { LastLoopSecond = nowTick; return; } if ((nowTick - LastLoopSecond) / 10000000 > ServerListLoop) { Debug.Log("定时请求服务器列表"); ServerListCenter.Instance.RequestServerCommonList(); LastLoopSecond = nowTick; } } public C0101_tagCPlayerLogin Get0101SendPackage(H0101_tagServerPrepared _serverInfo) { var send = new C0101_tagCPlayerLogin(); switch (VersionConfig.Get().versionAuthority) { case VersionAuthority.InterTest: send.IDType = 1; send.AccID = accountBuf; if (sdkLoginResult == null) send.Password = "111"; else send.Password = sdkLoginResult.token; send.MAC = DeviceUtility.GetMac(); send.Version = _serverInfo.Version; send.LineNO = 255; send.AppID = VersionConfig.Get().appId; send.AccountID = 1000;// 内部登陆的时候的id send.TokenExpire = "1519750743000";// 内部登陆的时长,无所谓的 send.Phone = 0; send.ServerID = (uint)ServerListCenter.Instance.currentServer.region_flag; send.Adult = 1; send.ExtraLen = 0; send.Extra = ""; break; case VersionAuthority.Release: { var deviceInfo = DeviceUtility.GetDeviceModel(); deviceInfo.Replace(" ", "").Replace("=", "").Replace("%", "").Replace("-", "").Replace("|", ""); var versionStr = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", deviceInfo); send.Extra = StringUtility.Contact(VersionConfig.Get().SpID, "|", SDKUtils.Instance.Device.uniqueID, "|", sdkLoginResult.token, "|", sdkLoginResult.qkUserName, "|", versionStr.Substring(0, Math.Min(24, versionStr.Length))); Debug.Log("=====> extra: " + send.Extra); send.ExtraLen = (ushort)send.Extra.Length; send.IDType = (byte)SDKUtils.Instance.ChannelPlatform; send.Password = sdkLoginResult.token; send.AccID = sdkLoginResult.account; send.MAC = DeviceUtility.GetMac(); send.Version = _serverInfo.Version; send.LineNO = 255; send.AppID = VersionConfig.Get().appId; send.AccountID = (uint)sdkLoginResult.accountID; send.TokenExpire = sdkLoginResult.tokenExpire; send.Phone = (byte)sdkLoginResult.phone; send.ServerID = (uint)ServerListCenter.Instance.currentServer.region_flag; if (sdkIDCheckIDAuthentication.type == "1") { send.Adult = 1; } else if (sdkIDCheckIDAuthentication.type == "2") { send.Adult = MathUtility.CheckAdult(sdkIDCheckIDAuthentication.card_id) ? (byte)1 : (byte)0; } else { send.Adult = 0; } break; } } return send; } public string GetVersionStr() { return StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", InitialFunctionConfig.Get("version").Numerical1); } }