| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
|   | 
|   | 
| public class LoginManager : ManagerBase<LoginManager> | 
| { | 
|     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<bool> 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; | 
|   | 
|   | 
|         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); | 
|     } | 
| } |