using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace Snxxz.UI { public class LoginModel : Model { 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; } public SDKUtility.FP_LoginOk sdkLoginResult; public SDKUtility.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; bool m_ReconnecBackGround = false; public bool reconnectBackGround { get { return m_ReconnecBackGround; } set { m_ReconnecBackGround = value; } } bool m_OnCreateRole = false; public bool onCreateRole { get { return m_OnCreateRole; } set { m_OnCreateRole = value; } } bool m_Busy = false; public bool busy { get { return m_Busy; } set { m_Busy = value; } } public override void Init() { SDKUtility.Instance.onFreePlatformLoginOk += OnSDKAccountLoginOk; SDKUtility.Instance.onFreePlatformLogoutOk += OnSDKAccountLoginOutOk; SDKUtility.Instance.onFreePlatformBindOk += OnSDKAccountBindOk; SDKUtility.Instance.onFreePlatfromCheckIDOK += OnGetIDAuthenticationInfo; DTC0101_tagServerPrepared.onServerPreparedEvent += AccessLogin; DTC0115_tagAskClientVersion.onAskClientVersionEvent += CheckClientVersion; DTC0107_tagShowLoginFrm.OnLoginSucceed += OnGetPlayerLoginInfo; SnxxzGame.Instance.AddApplicationOutAction(OnApplicationOut); } public override void UnInit() { SDKUtility.Instance.onFreePlatformLoginOk -= OnSDKAccountLoginOk; SDKUtility.Instance.onFreePlatformLogoutOk -= OnSDKAccountLoginOutOk; SDKUtility.Instance.onFreePlatfromCheckIDOK -= OnGetIDAuthenticationInfo; SDKUtility.Instance.onFreePlatformBindOk -= OnSDKAccountBindOk; DTC0101_tagServerPrepared.onServerPreparedEvent -= AccessLogin; DTC0115_tagAskClientVersion.onAskClientVersionEvent -= CheckClientVersion; DTC0107_tagShowLoginFrm.OnLoginSucceed -= OnGetPlayerLoginInfo; SnxxzGame.Instance.RemoveApplicationOutAction(OnApplicationOut); } 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; } private void OnSDKAccountLoginOk(SDKUtility.FP_LoginOk _result) { sdkLogined = true; sdkLoginResult = _result; if (!DebugUtility.Instance.debugAccount) { DebugUtility.Instance.RequestDebugAuthority(sdkLoginResult.account); } SDKUtility.Instance.FreePlatformCheckIDAuthentication(sdkLoginResult.account); ServerListCenter.Instance.RequestServerListPlayer(sdkLoginResult.account); GameNotice.OpenGameNotice(); SDKUtility.Instance.MakeKeyAndVisible(); OperationLogCollect.Instance.RecordLauchEvent(5); } private void OnSDKAccountLoginOutOk() { sdkLogined = false; sdkLoginResult = default(SDKUtility.FP_LoginOk); if (StageManager.Instance.CurrentStage is LoginStage) { SDKUtility.Instance.FreePlatformLogin(); } else { GameNetSystem.Instance.LoginOut(); } } private void OnSDKAccountBindOk() { sdkLoginResult.phone = 1; if (accountBindOkEvent != null) { accountBindOkEvent(); } } private void OnGetIDAuthenticationInfo(SDKUtility.FP_CheckIDAuthentication _info) { sdkIDCheckIDAuthentication = _info; } public void AccountLogin(string _account, string _ip, int _port, int _gamePort) { 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); } } 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; DebugEx.LogError(_result); NetLinkWin.Hide(); return; } if (string.IsNullOrEmpty(_result)) { busy = false; MessageWin.Inst.ShowFixedTip(Language.Get("L1117")); NetLinkWin.Hide(); return; } var stringSet = _result.Split('|'); if (stringSet[0] != "OK") { if (stringSet.Length > 1) { MessageWin.Inst.ShowFixedTip(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() { var sendInfo = new C0123_tagCClientPackVersion(); sendInfo.Version = DwVersionNo; GameNetSystem.Instance.SendInfo(sendInfo); } private void AccessLogin(H0101_tagServerPrepared _serverInfo) { var send = new C0101_tagCPlayerLogin(); switch (VersionConfig.Get().versionAuthority) { case VersionAuthority.InterTest: send.IDType = 1; send.AccID = accountBuf; send.Password = "64e228993a2e7820004fec23251da204"; 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: if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Free) { send.IDType = 1; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Mr) { send.IDType = 2; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Sp) { send.IDType = 3; } send.AccID = sdkLoginResult.account; send.Password = sdkLoginResult.token; send.MAC = DeviceUtility.GetMac(); send.Version = _serverInfo.Version; send.LineNO = 255; send.AppID = VersionConfig.Get().appId; send.AccountID = (uint)sdkLoginResult.accountID;// 内部登陆的时候的id 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; } GameNetSystem.Instance.SendInfo(send); // 登录 } private void CheckClientVersion() { var sendInfo = new C010D_tagCClientVersion(); sendInfo.Version = "10.1000.1"; GameNetSystem.Instance.SendInfo(sendInfo); } private void OnGetPlayerLoginInfo(byte _type) { busy = false; switch (_type) { case 1: NetLinkWin.Hide(); EnterWorld(1); StageManager.Instance.LoadCreateRoleStage(); break; case 2: if (!onCreateRole) { if (reconnectBackGround) { EnterWorld(2); } else { NetLinkWin.Hide(); StageManager.Instance.LoadSelectRoleStage(); } } break; } OperationLogCollect.Instance.RecordDeviceDetails(); } public void EnterWorld(int _type) { if (Application.internetReachability == NetworkReachability.NotReachable) { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("L1116"), () => { } ); NetLinkWin.Hide(); return; } NetLinkWin.Show(); var tagCRoleLoginAsk = new C0108_tagCRoleLoginAsk(); tagCRoleLoginAsk.Type = (byte)_type;//进入游戏 tagCRoleLoginAsk.ClientID = SDKUtility.Instance.RegistrationID; GameNetSystem.Instance.SendInfo(tagCRoleLoginAsk); if (_type == 2 && GameNetSystem.Instance.netState != GameNetSystem.NetState.Connected) { GameNetSystem.Instance.OnEnterWorld(); } } public void NofityResigerResult(bool _ok, string _accountName, string _password, string _result) { if (!_ok) { DebugEx.Log("AccountPadGet Error:" + _result); if (registerResultEvent != null) { registerResultEvent(false); } } else { string[] resultArray = _result.Split('|'); if (string.Equals(resultArray[0], "OK")) { localSaveAccountName = _accountName; if (registerResultEvent != null) { registerResultEvent(true); } } else { if (registerResultEvent != null) { registerResultEvent(false); } } } } private void OnApplicationOut() { var sendInfo = new C0103_tagCPlayerLogOut(); sendInfo.Type = 1; GameNetSystem.Instance.SendInfo(sendInfo); } } }