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; } }