using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace Snxxz.UI { [XLua.LuaCallCSharp] 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; SnxxzGame.Instance.AddApplicationOutAction(OnApplicationOut); } public override void UnInit() { SDKUtility.Instance.onFreePlatformLoginOk -= OnSDKAccountLoginOk; SDKUtility.Instance.onFreePlatformLogoutOk -= OnSDKAccountLoginOutOk; SDKUtility.Instance.onFreePlatfromCheckIDOK -= OnGetIDAuthenticationInfo; SDKUtility.Instance.onFreePlatformBindOk -= OnSDKAccountBindOk; 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; } public bool isLogined { get; private set; } private void OnSDKAccountLoginOk(SDKUtility.FP_LoginOk _result) { sdkLogined = true; sdkLoginResult = _result; if (!DebugUtility.Instance.isWhiteListAccount) { DebugUtility.Instance.RequestWhiteListAuthority(sdkLoginResult.account); } SDKUtility.Instance.FreePlatformCheckIDAuthentication(sdkLoginResult.account); ServerListCenter.Instance.RequestServerListPlayer(sdkLoginResult.account); SDKUtility.Instance.MakeKeyAndVisible(); OperationLogCollect.Instance.RecordLauchEvent(5); if (VersionUtility.Instance.NeedMaoErUpdate()) { VersionUtility.Instance.RequestMaoErVersionCheck(); } else { GameNotice.OpenGameNotice(); } } private void OnSDKAccountLoginOutOk() { sdkLogined = false; sdkLoginResult = default(SDKUtility.FP_LoginOk); if (StageLoad.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) { 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 { if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yl || (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yj && SDKUtility.Yj_AppID.Equals("hwgame"))) { SDKUtility.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; DebugEx.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 C0101_tagCPlayerLogin Get0101SendPackage(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: send.Extra = VersionConfig.Get().SpID; send.ExtraLen = (byte)send.Extra.Length; 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.Extra += ("|" + SDKUtility.Instance.FreePlatformInfo.sessionID); send.ExtraLen = (byte)send.Extra.Length; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Js) { send.IDType = 4; send.Extra += ("|" + sdkLoginResult.token); send.ExtraLen = (byte)send.Extra.Length; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yj) { send.IDType = 5; send.Extra += ("|" + SDKUtility.Yj_SpID + "|" + SDKUtility.Yj_AppID + "|" + SDKUtility.Instance.FreePlatformInfo.accountID); send.ExtraLen = (byte)send.Extra.Length; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yl) { send.IDType = 6; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Xn) { send.IDType = 7; send.Extra += ("|" + SDKUtility.Yj_AppID + "|" + SDKUtility.Yj_Version); send.ExtraLen = (byte)send.Extra.Length; } else if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Cjm) { send.IDType = 8; send.Extra += ("|" + SDKUtility.Yj_AppID + "|" + SDKUtility.Instance.FreePlatformInfo.token); send.ExtraLen = (byte)send.Extra.Length; } send.AccID = sdkLoginResult.account; if (SDKUtility.Instance.ChannelPlatform != SDKUtility.E_ChannelPlatform.Cjm) { send.Password = sdkLoginResult.token; } else { send.Password = ""; } 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; if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Sp) { send.TokenExpire = SDKUtility.Instance.FreePlatformInfo.timeStamp; } 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 void CheckClientVersion() { var sendInfo = new C010D_tagCClientVersion(); sendInfo.Version = "10.1000.1"; GameNetSystem.Instance.SendInfo(sendInfo); } public void OnGetPlayerLoginInfo(byte _type) { busy = false; switch (_type) { case 1: NetLinkWin.Hide(); EnterWorld(1); StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = 2, toLineId = 0, needEmpty = false, needLoadResource = true, serverType = ServerType.Main, isClientLoadMap = true }); break; case 2: if (!onCreateRole) { if (reconnectBackGround) { EnterWorld(2); } else { NetLinkWin.Hide(); StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = 3, toLineId = 0, needEmpty = false, needLoadResource = true, serverType = ServerType.Main, isClientLoadMap = true }); } } break; } OperationLogCollect.Instance.RecordDeviceDetails(); } LogicUpdate waitForConfigInited = null; public void EnterWorld(int _type) { if (Application.internetReachability == NetworkReachability.NotReachable) { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("L1116"), () => { } ); NetLinkWin.Hide(); return; } NetLinkWin.Show(); if (waitForConfigInited != null && !waitForConfigInited.destroyDirty) { waitForConfigInited.Destroy(); waitForConfigInited = null; } if (!ConfigInitiator.done) { var waitForConfigInited = new LogicUpdate(); waitForConfigInited.Start( () => { if (ConfigInitiator.done) { 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(); } waitForConfigInited.Destroy(); } } ); } else { 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(); } } } private void OnApplicationOut() { var sendInfo = new C0103_tagCPlayerLogOut(); sendInfo.Type = 1; GameNetSystem.Instance.SendInfo(sendInfo); } } }