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;
WhiteList whiteList;
///
/// 白名单URL
///
string urlWhiteList = "https://sfgdemo-1303083714.cos.ap-hongkong.myqcloud.com/WhiteList.json";
///
/// 是否验证Mac地址
///
bool isVerify = false;
public override void OnCloseWindow()
{
UIManager.Instance.HideUI(WindowID.DlgLoading);
}
public override void OnDestroyWindow()
{
}
public override void OnInitWindow()
{
GetMacAddress();
confirmBtn.onClick.AddListener(async () =>
{
await UIManager.Instance.ShowUI(WindowID.DlgLoading);
//await UniTask.Delay(3000);
StartCoroutine(GetWhiteList());
});
}
public override void OnShowWindow()
{
}
///
/// 请求白名单
///
///
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.URLFaild;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
///
/// 验证账号
///
async void VerifyAccount()
{
if (isVerify)
{
if (whiteList.table.Contains(inputField.text))
{
StepManager.userID = inputField.text;
StartCoroutine(GetSecretKey());
}
else
{
await UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
else
{
if (whiteList.table.Contains(inputField.text))
{
StepManager.userID = inputField.text;
UIManager.Instance.HideUI(WindowID.DlgLogin);
await UIManager.Instance.ShowUI(WindowID.FaceBuildPanel);
}
else
{
StepManager.requestState = StepManager.RequestState.HashFaild;
await UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
}
///
/// 获取秘钥
///
///
IEnumerator GetSecretKey()
{
string url = "http://172.18.10.189:8000/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");
request.timeout = 5;
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log(request.downloadHandler.text);
GetSecretKeyResult result = JsonMapper.ToObject(request.downloadHandler.text);
if (result.code==0)
{
StartCoroutine(Login(result.message));
}
else
{
Debug.Log($"获取秘钥失败:{result.message}");
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
else
{
Debug.Log(request.error);
StepManager.requestState = StepManager.RequestState.URLFaild;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
///
/// 登录请求
///
/// 秘钥
///
IEnumerator Login(string secretKey)
{
string url = "http://172.18.10.189:8000/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");
request.timeout = 5;
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log(request.downloadHandler.text);
LoginResult loginResult = JsonMapper.ToObject(request.downloadHandler.text);
if (loginResult.code==0)
{
UIManager.Instance.HideUI(WindowID.DlgLogin);
yield return UIManager.Instance.ShowUI(WindowID.FaceBuildPanel);
}
else
{
StepManager.requestState = StepManager.RequestState.MacFaild;
yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
}
}
else
{
Debug.Log(request.error);
StepManager.requestState = StepManager.RequestState.URLFaild;
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;
};
}
}
return physicalAddress;
}
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;
}
///
/// 白名单数据
///
struct WhiteList
{
public string[] table;
public string TimeStamp;
}
}