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