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;
|
|
if (!DebugUtility.Instance.isWhiteListAccount)
|
{
|
DebugUtility.Instance.RequestWhiteListAuthority(sdkLoginResult.account);
|
}
|
|
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:
|
send.Extra = VersionConfig.Get().SpID + "|" + SDKUtils.Instance.Device.uniqueID;
|
send.ExtraLen = (ushort)send.Extra.Length;
|
if (SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.Free)
|
{
|
send.IDType = 1;
|
send.Password = sdkLoginResult.token;
|
}
|
else if (SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.Quick)
|
{
|
send.IDType = 10;
|
send.Extra += ("|" + sdkLoginResult.token + "|" + sdkLoginResult.qkUserName);
|
send.ExtraLen = (ushort)send.Extra.Length;
|
}
|
else if (SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.Hy ||
|
SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.hygt ||
|
SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.newyn ||
|
SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.en
|
)
|
{
|
send.IDType = (byte)SDKUtils.Instance.ChannelPlatform;
|
send.Extra += ("|" + sdkLoginResult.token + "|" + sdkLoginResult.qkUserName);
|
send.ExtraLen = (ushort)send.Extra.Length;
|
}
|
|
send.AccID = sdkLoginResult.account;
|
|
var deviceInfo = DeviceUtility.GetDeviceModel();
|
deviceInfo.Replace(" ", "").Replace("=", "").Replace("%", "").Replace("-", "").Replace("|","");
|
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 (SDKUtils.Instance.ChannelPlatform == SDKUtils.E_ChannelPlatform.Sp)
|
{
|
send.TokenExpire = SDKUtils.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;
|
}
|
}
|