DlgLogin.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. using AR.Core;
  2. using Cysharp.Threading.Tasks;
  3. using LitJson;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Net.NetworkInformation;
  11. using TMPro;
  12. using UnityEngine;
  13. using UnityEngine.Networking;
  14. using UnityEngine.UI;
  15. namespace Assets
  16. {
  17. public class DlgLogin : BasePanel
  18. {
  19. public TMP_InputField inputField;
  20. public Button confirmBtn;
  21. WhiteList whiteList;
  22. /// <summary>
  23. /// 白名单URL
  24. /// </summary>
  25. string urlWhiteList = "https://sfgdemo-1303083714.cos.ap-hongkong.myqcloud.com/WhiteList.json";
  26. /// <summary>
  27. /// 是否验证Mac地址
  28. /// </summary>
  29. bool isVerify = false;
  30. public override void OnCloseWindow()
  31. {
  32. UIManager.Instance.HideUI(WindowID.DlgLoading);
  33. }
  34. public override void OnDestroyWindow()
  35. {
  36. }
  37. public override void OnInitWindow()
  38. {
  39. GetMacAddress();
  40. confirmBtn.onClick.AddListener(async () =>
  41. {
  42. await UIManager.Instance.ShowUI(WindowID.DlgLoading);
  43. //await UniTask.Delay(3000);
  44. StartCoroutine(GetWhiteList());
  45. });
  46. }
  47. public override void OnShowWindow()
  48. {
  49. }
  50. /// <summary>
  51. /// 请求白名单
  52. /// </summary>
  53. /// <returns></returns>
  54. IEnumerator GetWhiteList()
  55. {
  56. UnityWebRequest request = UnityWebRequest.Get(urlWhiteList);
  57. yield return request.SendWebRequest();
  58. if (request.result == UnityWebRequest.Result.Success)
  59. {
  60. whiteList = JsonMapper.ToObject<WhiteList>(request.downloadHandler.text);
  61. StepManager.timeStamp = whiteList.TimeStamp;
  62. VerifyAccount();
  63. }
  64. else
  65. {
  66. Debug.Log(request.error);
  67. StepManager.requestState = StepManager.RequestState.URLFaild;
  68. yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  69. }
  70. }
  71. /// <summary>
  72. /// 验证账号
  73. /// </summary>
  74. async void VerifyAccount()
  75. {
  76. if (isVerify)
  77. {
  78. if (whiteList.table.Contains(inputField.text))
  79. {
  80. StepManager.userID = inputField.text;
  81. StartCoroutine(GetSecretKey());
  82. }
  83. else
  84. {
  85. await UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  86. }
  87. }
  88. else
  89. {
  90. if (whiteList.table.Contains(inputField.text))
  91. {
  92. StepManager.userID = inputField.text;
  93. UIManager.Instance.HideUI(WindowID.DlgLogin);
  94. await UIManager.Instance.ShowUI(WindowID.FaceBuildPanel);
  95. }
  96. else
  97. {
  98. StepManager.requestState = StepManager.RequestState.HashFaild;
  99. await UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  100. }
  101. }
  102. }
  103. /// <summary>
  104. /// 获取秘钥
  105. /// </summary>
  106. /// <returns></returns>
  107. IEnumerator GetSecretKey()
  108. {
  109. string url = "http://172.18.10.189:8000/api/Account/SecretKey";
  110. AccountMsg accountMsg = new AccountMsg();
  111. accountMsg.Account = inputField.text;
  112. string json = JsonMapper.ToJson(accountMsg);
  113. byte[] postBytes = System.Text.Encoding.Default.GetBytes(json);
  114. UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
  115. request.uploadHandler =new UploadHandlerRaw(postBytes);
  116. request.SetRequestHeader("Content-Type", "application/json");
  117. request.timeout = 5;
  118. yield return request.SendWebRequest();
  119. if (request.result == UnityWebRequest.Result.Success)
  120. {
  121. Debug.Log(request.downloadHandler.text);
  122. GetSecretKeyResult result = JsonMapper.ToObject<GetSecretKeyResult>(request.downloadHandler.text);
  123. if (result.code==0)
  124. {
  125. StartCoroutine(Login(result.message));
  126. }
  127. else
  128. {
  129. Debug.Log($"获取秘钥失败:{result.message}");
  130. yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  131. }
  132. }
  133. else
  134. {
  135. Debug.Log(request.error);
  136. StepManager.requestState = StepManager.RequestState.URLFaild;
  137. yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  138. }
  139. }
  140. /// <summary>
  141. /// 登录请求
  142. /// </summary>
  143. /// <param name="secretKey">秘钥</param>
  144. /// <returns></returns>
  145. IEnumerator Login(string secretKey)
  146. {
  147. string url = "http://172.18.10.189:8000/api/Account/Login";
  148. Userdata userInfo = new Userdata();
  149. userInfo.account = inputField.text;
  150. userInfo.mac = DesEncryptHelper.Encrypt(GetMacAddress(), secretKey);
  151. string json = JsonMapper.ToJson(userInfo);
  152. byte[] postBytes = System.Text.Encoding.Default.GetBytes(json);
  153. UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
  154. request.uploadHandler = new UploadHandlerRaw(postBytes);
  155. request.SetRequestHeader("Content-Type", "application/json");
  156. request.timeout = 5;
  157. yield return request.SendWebRequest();
  158. if (request.result == UnityWebRequest.Result.Success)
  159. {
  160. Debug.Log(request.downloadHandler.text);
  161. LoginResult loginResult = JsonMapper.ToObject<LoginResult>(request.downloadHandler.text);
  162. if (loginResult.code==0)
  163. {
  164. UIManager.Instance.HideUI(WindowID.DlgLogin);
  165. yield return UIManager.Instance.ShowUI(WindowID.FaceBuildPanel);
  166. }
  167. else
  168. {
  169. StepManager.requestState = StepManager.RequestState.MacFaild;
  170. yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  171. }
  172. }
  173. else
  174. {
  175. Debug.Log(request.error);
  176. StepManager.requestState = StepManager.RequestState.URLFaild;
  177. yield return UIManager.Instance.ShowUI(WindowID.DlgLoginFaild);
  178. }
  179. }
  180. /// <summary>
  181. /// 获取本机Mac地址
  182. /// </summary>
  183. /// <returns></returns>
  184. private string GetMacAddress()
  185. {
  186. string physicalAddress = "";
  187. NetworkInterface[] nice = NetworkInterface.GetAllNetworkInterfaces();
  188. foreach (NetworkInterface adaper in nice)
  189. {
  190. if (adaper.Description == "en0")
  191. {
  192. physicalAddress = adaper.GetPhysicalAddress().ToString();
  193. break;
  194. }
  195. else
  196. {
  197. physicalAddress = adaper.GetPhysicalAddress().ToString();
  198. if (physicalAddress != "")
  199. {
  200. break;
  201. };
  202. }
  203. }
  204. return physicalAddress;
  205. }
  206. public async void LoadJson()
  207. {
  208. var txtAsset = await YooAssetManager.Instance.LoadAsset<TextAsset>("Assets/Bundles/Config/WhiteList");
  209. whiteList = JsonMapper.ToObject<WhiteList>(txtAsset.text);
  210. }
  211. }
  212. /// <summary>
  213. /// 账号和Mac地址
  214. /// </summary>
  215. struct Userdata
  216. {
  217. public string account;
  218. public string mac;
  219. }
  220. /// <summary>
  221. /// 输入账号
  222. /// </summary>
  223. struct AccountMsg
  224. {
  225. public string Account;
  226. }
  227. /// <summary>
  228. /// 秘钥返回值
  229. /// </summary>
  230. struct GetSecretKeyResult
  231. {
  232. public int code;
  233. public string message;
  234. public string data;
  235. }
  236. /// <summary>
  237. /// 登录返回值
  238. /// </summary>
  239. struct LoginResult
  240. {
  241. public int code;
  242. public string message;
  243. }
  244. /// <summary>
  245. /// 白名单数据
  246. /// </summary>
  247. struct WhiteList
  248. {
  249. public string[] table;
  250. public string TimeStamp;
  251. }
  252. }