DlgLogin.cs 7.8 KB

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