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); 
 | 
    } 
 | 
} 
 |