using AR.Core;
using Cysharp.Threading.Tasks;
using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
namespace Assets
{
public class DlgLogin : BasePanel
{
public TMP_InputField inputField;
public Button confirmBtn;
public GameObject inputCode;
public GameObject comeBackImg;
WhiteList whiteList;
///
/// 白名单URL
///
string urlWhiteList = "http://txcdn.starmelody.art/WhiteList.json";
///
/// 是否验证Mac地址
///
bool isVerify = true;
public override void OnCloseWindow()
{
UIManager.Instance.HideUI(WindowID.DlgLoading);
}
public override void OnDestroyWindow()
{
}
public override void OnInitWindow()
{
PlayerPrefs.DeleteKey("account");
confirmBtn.onClick.AddListener(async () =>
{
await UIManager.Instance.ShowUI(WindowID.DlgLoading);
VerifyAccount();
});
OnShowWindow();
}
public override void OnShowWindow()
{
string account = PlayerPrefs.GetString("account");
if (string.IsNullOrEmpty(account))
{
Debug.Log("没有本地保存的账号");
inputCode.SetActive(true);
comeBackImg.SetActive(false);
}
else
{
Debug.Log("已有本地保存的账号");
Debug.Log("本地账号" + account);
inputCode.SetActive(false);
comeBackImg.SetActive(true);
inputField.text = account;
}
}
///
/// 请求白名单
///
///
//IEnumerator GetWhiteList()
//{
// UnityWebRequest request = UnityWebRequest.Get(urlWhiteList);
// yield return request.SendWebRequest();
// if (request.result == UnityWebRequest.Result.Success)
// {
// whiteList = JsonMapper.ToObject(request.downloadHandler.text);
// //StepManager.timeStamp = whiteList.TimeStamp;
// VerifyAccount();
// }
// else
// {
// Debug.Log(request.error);
// StepManager.requestState = StepManager.RequestState.URLFailed;
// yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
// }
//}
///
/// 验证本地账号
///
async void VerifyAccount()
{
if (isVerify)
{
StartCoroutine(GetSecretKey());
}
else
{
await UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
///
/// 获取秘钥
///
///
IEnumerator GetSecretKey()
{
string url = "http://api.starmelody.art/api/Account/SecretKey";
AccountMsg accountMsg = new AccountMsg();
accountMsg.Account = inputField.text;
string json = JsonMapper.ToJson(accountMsg);
byte[] postBytes = System.Text.Encoding.Default.GetBytes(json);
UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
request.uploadHandler =new UploadHandlerRaw(postBytes);
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log(request.downloadHandler.text);
JsonData data = JsonMapper.ToObject(request.downloadHandler.text);
int code = (int)data["code"];
if (code == 0)
{
StartCoroutine(Login((string)data["message"]));
}
else
{
Debug.Log($"获取秘钥失败:{(string)data["message"]}");
StepManager.requestCode = code;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
else
{
Debug.Log("密钥请求失败"+request.error);
StepManager.requestCode = 1;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
///
/// 登录请求
///
/// 秘钥
///
IEnumerator Login(string secretKey)
{
string url = "http://api.starmelody.art/api/Account/Login";
Userdata userInfo = new Userdata();
userInfo.account = inputField.text;
userInfo.mac = DesEncryptHelper.Encrypt(GetMacAddress(), secretKey);
string json = JsonMapper.ToJson(userInfo);
byte[] postBytes = System.Text.Encoding.Default.GetBytes(json);
UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
request.uploadHandler = new UploadHandlerRaw(postBytes);
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log(request.downloadHandler.text);
JsonData data = JsonMapper.ToObject(request.downloadHandler.text);
int code = (int)data["code"];
if (code==0)
{
PlayerPrefs.SetString("account", inputField.text);
PlayerPrefs.Save();
StepManager.timeStamp = (long)data["data"];
UIManager.Instance.HideUI(WindowID.DlgLogin);
yield return UIManager.Instance.ShowUI(WindowID.FaceBuildPanel);
}
else
{
StepManager.requestCode = code;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
else
{
Debug.Log("登录请求"+request.error);
//网络连接失败
StepManager.requestCode = 1;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
///
/// 获取本机Mac地址
///
///
private string GetMacAddress()
{
string physicalAddress = "";
NetworkInterface[] nice = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adaper in nice)
{
if (adaper.Description == "en0")
{
physicalAddress = adaper.GetPhysicalAddress().ToString();
break;
}
else
{
physicalAddress = adaper.GetPhysicalAddress().ToString();
if (physicalAddress != "")
{
break;
};
}
}
Debug.Log("Mac地址:"+physicalAddress);
#if UNITY_ANDROID
return SystemInfo.deviceUniqueIdentifier;
#else
return physicalAddress;
#endif
}
public async void LoadJson()
{
var txtAsset = await YooAssetManager.Instance.LoadAsset("Assets/Bundles/Config/WhiteList");
whiteList = JsonMapper.ToObject(txtAsset.text);
}
}
///
/// 账号和Mac地址
///
struct Userdata
{
public string account;
public string mac;
}
///
/// 输入账号
///
struct AccountMsg
{
public string Account;
}
///
/// 秘钥返回值
///
struct GetSecretKeyResult
{
public int code;
public string message;
public string data;
}
///
/// 登录返回值
///
struct LoginResult
{
public int code;
public string message;
public long data;
}
///
/// 白名单数据
///
struct WhiteList
{
public string[] table;
public string TimeStamp;
}
}