using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace vnxbqy.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 ynmbxxjUtil.FP_LoginOk sdkLoginResult; public ynmbxxjUtil.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; 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; } } int ServerListLoop = 200; //秒:在登录界面请求服务器列表的间隔 long LastLoopSecond = 0; //上一次的请求时间 100纳秒单位 public override void Init() { ynmbxxjUtil.Instance.onFreePlatformLoginOk += OnSDKAccountLoginOk; ynmbxxjUtil.Instance.onFreePlatformLogoutOk += OnSDKAccountLoginOutOk; ynmbxxjUtil.Instance.onFreePlatformBindOk += OnSDKAccountBindOk; SnxxzGame.Instance.AddApplicationOutAction(OnApplicationOut); loginErrorInfo = string.Empty; } public override void UnInit() { ynmbxxjUtil.Instance.onFreePlatformLoginOk -= OnSDKAccountLoginOk; ynmbxxjUtil.Instance.onFreePlatformLogoutOk -= OnSDKAccountLoginOutOk; ynmbxxjUtil.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; set; } private void OnSDKAccountLoginOk(ynmbxxjUtil.FP_LoginOk _result) { sdkLogined = true; sdkLoginResult = _result; if (!DebugUtility.Instance.isWhiteListAccount) { DebugUtility.Instance.RequestWhiteListAuthority(sdkLoginResult.account); } ServerListCenter.Instance.RequestServerListPlayer(sdkLoginResult.account); ynmbxxjUtil.Instance.MakeKeyAndVisible(); OperationLogCollect.Instance.RecordLauchEvent(5); GameNotice.OpenGameNotice(); } private void OnSDKAccountLoginOutOk() { sdkLogined = false; sdkLoginResult = default(ynmbxxjUtil.FP_LoginOk); GameNetSystem.Instance.LoginOut(); } private void OnSDKAccountBindOk() { sdkLoginResult.phone = 1; if (accountBindOkEvent != null) { accountBindOkEvent(); } } private void OnGetIDAuthenticationInfo(ynmbxxjUtil.FP_CheckIDAuthentication _info) { sdkIDCheckIDAuthentication = _info; } public void AccountLogin(string _account, string _ip, int _port, int _gamePort) { DebugEx.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 { ynmbxxjUtil.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; 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: send.Extra = VersionConfig.Get().SpID + "|" + ynmbxxjUtil.Instance.Device.uniqueID; send.ExtraLen = (ushort)send.Extra.Length; if (ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.Free) { send.IDType = 1; send.Password = sdkLoginResult.token; } else if (ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.Quick) { send.IDType = 10; send.Extra += ("|" + sdkLoginResult.token + "|" + sdkLoginResult.qkUserName); send.ExtraLen = (ushort)send.Extra.Length; } else if (ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.Hy || ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.hygt || ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.newyn || ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.en ) { send.IDType = (byte)ynmbxxjUtil.Instance.ChannelPlatform; send.Extra += ("|" + sdkLoginResult.token + "|" + sdkLoginResult.qkUserName); send.ExtraLen = (ushort)send.Extra.Length; } string deviceInfo = "ios"; try { deviceInfo = DeviceUtility.GetDeviceModel(); deviceInfo.Replace(" ", "").Replace("=", "").Replace("%", "").Replace("-", "").Replace("|",""); } catch (Exception ex) { Debug.Log("C0101_tagCPlayerLogin Exception: " + ex.Message); } send.AccID = sdkLoginResult.account; var versionStr = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", deviceInfo); send.Extra += ("|" + versionStr.Substring(0, Math.Min(24, versionStr.Length))); Debug.Log("=====> extra: " + send.Extra); send.ExtraLen = (ushort)send.Extra.Length; 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; if (ynmbxxjUtil.Instance.ChannelPlatform == ynmbxxjUtil.E_ChannelPlatform.Sp) { send.TokenExpire = ynmbxxjUtil.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 { WindowCenter.Instance.Open(); EnterWorld(2); } } 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 = ynmbxxjUtil.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 = ynmbxxjUtil.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); } //登录界面定时请求服务器列表 //用于返回登录或者等待时刷新最新服务器列表,不需要重启游戏 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 void ShowStartGameError(string msgCode) { loginErrorInfo = Language.Get(msgCode); loginErrorEvent?.Invoke(); } } }