LoginPanel.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. using LitJson;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using SC.XR.Unity;
  5. using Blue;
  6. using System;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Text.RegularExpressions;
  11. using UnityEngine;
  12. using UnityEngine.UI;
  13. using Vuforia;
  14. using XRTool.Util;
  15. public class LoginPanel : BaseUI
  16. {
  17. private SCInputField m_Account;
  18. private Button m_EmptyAccountBtn;
  19. private Text m_AccountErrorStr;
  20. private Transform m_AccountError;
  21. private string m_AccountStr;
  22. private SCInputField m_Password;
  23. private Button m_EmptyPwdBtn;
  24. //private Button m_LockPwdBtn;
  25. private bool m_Islock;
  26. private Text m_PwdErrorStr;
  27. private Transform m_PwdError;
  28. private string m_PasswordStr;
  29. private Button m_Logn;
  30. private Toggle m_RemenberPwd;
  31. private bool m_IsRemberPwd;
  32. private Button m_SNBtn;
  33. private Text m_SN;
  34. private Text m_Versaion;
  35. Toggle Choose21;
  36. Toggle Choose20;
  37. public GameObject keyBoardgo;
  38. protected override void OnAwake()
  39. {
  40. base.OnAwake();
  41. Choose21 = CacheTransform.Find("Choose2.1").GetComponent<Toggle>();
  42. Choose21.onValueChanged.AddListener((bool b) => {
  43. UserInfo.Instance.is20 = !b;
  44. });
  45. Choose20 = CacheTransform.Find("Choose2.0").GetComponent<Toggle>();
  46. Choose20.onValueChanged.AddListener((bool b) => {
  47. UserInfo.Instance.is20 = b;
  48. });
  49. UserInfo.Instance.is20 = Choose20.isOn;
  50. m_Account = CacheTransform.Find("Account/SCInputField").GetComponent<SCInputField>();
  51. m_EmptyAccountBtn = CacheTransform.Find("Account/EmptyAccount").GetComponent<Button>();
  52. m_AccountErrorStr = CacheTransform.Find("Error/AccountError/Text").GetComponent<Text>();
  53. m_AccountError = CacheTransform.Find("Error/AccountError");
  54. m_Password = CacheTransform.Find("Password/SCInputField").GetComponent<SCInputField>();
  55. m_EmptyPwdBtn = CacheTransform.Find("Password/EmptyPassword").GetComponent<Button>();
  56. //m_LockPwdBtn = CacheTransform.Find("Password/Icon").GetComponent<Button>();
  57. //m_Islock = false;
  58. m_PwdErrorStr = CacheTransform.Find("Error/PasswordError/Text").GetComponent<Text>();
  59. m_PwdError = CacheTransform.Find("Error/PasswordError");
  60. m_Logn = CacheTransform.Find("LoginBtn").GetComponent<Button>();
  61. m_RemenberPwd = CacheTransform.Find("RememberPwd").GetComponent<Toggle>();
  62. m_RemenberPwd.isOn = false;
  63. m_IsRemberPwd = false;
  64. //m_SNBtn = CacheTransform.Find("SNLoginBtn").GetComponent<Button>();
  65. m_SN = CacheTransform.Find("SNAndVersion/SN/Text").GetComponent<Text>();
  66. m_Versaion = CacheTransform.Find("SNAndVersion/Versaion/Text").GetComponent<Text>();
  67. AddUIListenEvent();
  68. }
  69. private IEnumerator showkeyboard()
  70. {
  71. SCKeyboardFollower sCKeyboardFollower=null;
  72. while (true)
  73. {
  74. sCKeyboardFollower = FindObjectOfType<SCKeyboardFollower>();
  75. if(sCKeyboardFollower)
  76. {
  77. sCKeyboardFollower.enabled = false;
  78. Transform keytr = sCKeyboardFollower.transform.parent;
  79. sCKeyboardFollower.transform.parent = this.transform;
  80. sCKeyboardFollower.transform.localEulerAngles = new Vector3(20, 0, 0);
  81. sCKeyboardFollower.transform.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(385, 210,-82f);
  82. sCKeyboardFollower.transform.parent = keytr;
  83. }
  84. yield return null;
  85. }
  86. }
  87. Timer times;
  88. /// <summary>
  89. /// 添加UI的监听事件
  90. /// </summary>
  91. private void AddUIListenEvent()
  92. {
  93. StartCoroutine(showkeyboard());
  94. m_Account.onEndEdit.AddListener(OnAccountEndEdit);
  95. m_EmptyAccountBtn.onClick.AddListener(OnclickEmptyAccount);
  96. m_Password.onEndEdit.AddListener(OnPasswordEndEdit);
  97. m_EmptyPwdBtn.onClick.AddListener(OnClickEmptyPwd);
  98. //m_LockPwdBtn.onClick.AddListener(OnclickLockPwd);
  99. //m_Password.contentType = SCInputField.ContentType.Standard;
  100. Debug.Log("1111111111111111111111111111111111111111111111111111");
  101. m_Logn.onClick.AddListener(OnClickLogin);
  102. m_RemenberPwd.onValueChanged.AddListener(OnRemPwdValueChange);
  103. m_Versaion.text = Application.version;
  104. //m_SNBtn.onClick.AddListener(OnClickSnBtn);
  105. times = TimerMgr.Instance.CreateTimer(()=> {
  106. if(HttpAction.Instance.baseurl!="")
  107. {
  108. TimerMgr.Instance.DestroyTimer(times);
  109. switch (Application.version)
  110. {
  111. case "2.3.0.1":
  112. m_AccountStr = "1004344@qq.com";
  113. m_PasswordStr = "123456Aa";
  114. OnClickLogin();
  115. break;
  116. case "2.3.0.2":
  117. m_AccountStr = "32927527@qq.com";
  118. m_PasswordStr = "123456Aa";
  119. OnClickLogin();
  120. break;
  121. case "2.3.0.3":
  122. m_AccountStr = "wentan.cal@nfznxr.com";
  123. m_PasswordStr = "123456Aa";
  124. OnClickLogin();
  125. break;
  126. case "2.3.0.4":
  127. m_AccountStr = "88888888@gq.com";
  128. m_PasswordStr = "123456Aa";
  129. OnClickLogin();
  130. break;
  131. default:
  132. // m_AccountStr = "advtest1@1.com";
  133. // m_PasswordStr = "123456Aa";
  134. // OnClickLogin();
  135. break;
  136. }
  137. }
  138. },1,-1);
  139. string path = Application.persistentDataPath + "/Login/";
  140. LoginAcct la = new LoginAcct();
  141. la.acc = "";
  142. la.isre = false;
  143. la.pw = "";
  144. if (File.Exists(path + "Login.txt"))
  145. {
  146. string msg = File.ReadAllText(path + "Login.txt");
  147. la = JsonConvert.DeserializeObject<LoginAcct>(msg);
  148. }
  149. else
  150. {
  151. Directory.CreateDirectory(Application.persistentDataPath + "/Login");
  152. }
  153. m_Account.text = la.acc;
  154. m_Password.text = la.pw;
  155. m_Logn.interactable = la.isre;
  156. m_RemenberPwd.isOn = la.isre;
  157. m_IsRemberPwd = la.isre;
  158. m_AccountStr = la.acc;
  159. m_PasswordStr = la.pw;
  160. }
  161. #region UI监听事件
  162. /// <summary>
  163. /// 账号输入完成
  164. /// </summary>
  165. /// <param name="str"></param>
  166. private void OnAccountEndEdit(string str)
  167. {
  168. m_AccountStr = "";
  169. if (string.IsNullOrWhiteSpace(str))
  170. {
  171. m_AccountError.gameObject.SetActive(true);
  172. m_AccountErrorStr.text = "请输入邮箱账号";
  173. }
  174. else
  175. {
  176. //邮箱名以数字或字母开头;邮箱名可由字母、数字、点号、减号、下划线组成;邮箱名(@前的字符)长度为3~18个字符;邮箱名不能以点号、减号或下划线结尾;不能出现连续两个或两个以上的点号、减号。
  177. //string pattern = @"^[a-zA-Z0-9]((?<!(\.\.|--))[a-zA-Z0-9\._-]){1,16}[a-zA-Z0-9]@([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?|((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";
  178. string pattern = @"^([\w-\.]+)@([\w-\.]+)(\.[a-zA-Z0-9]+)$";
  179. if (Regex.IsMatch(str, pattern))
  180. {
  181. m_AccountStr = str;
  182. m_AccountErrorStr.text = "";
  183. m_AccountError.gameObject.SetActive(false);
  184. }
  185. else
  186. {
  187. m_AccountError.gameObject.SetActive(true);
  188. m_AccountErrorStr.text = "账号不合法";
  189. }
  190. }
  191. if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
  192. {
  193. m_Logn.interactable = true;
  194. }
  195. }
  196. /// <summary>
  197. /// 清理账号输入
  198. /// </summary>
  199. private void OnclickEmptyAccount()
  200. {
  201. m_AccountErrorStr.text = "账号不能为空";
  202. m_AccountError.gameObject.SetActive(true);
  203. m_AccountStr = "";
  204. m_Account.text = "";
  205. m_Logn.interactable = false;
  206. }
  207. /// <summary>
  208. /// 密码输入完成
  209. /// </summary>
  210. /// <param name="str"></param>
  211. private void OnPasswordEndEdit(string str)
  212. {
  213. m_PasswordStr = "";
  214. if (string.IsNullOrWhiteSpace(str))
  215. {
  216. m_PwdError.gameObject.SetActive(true);
  217. m_PwdErrorStr.text = "请输入密码";
  218. }
  219. else
  220. {
  221. Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
  222. if (RegCHZN.IsMatch(str))
  223. {
  224. m_PwdError.gameObject.SetActive(true);
  225. m_PwdErrorStr.text = "密码不合法";
  226. return;
  227. }
  228. //int n = 0;
  229. ////必须包含小写字母
  230. //string pattern1 = @"(?=.*[a-z])";
  231. ////必须包含大写字母
  232. //string pattern2 = @"(?=.*[A-Z])";
  233. ////必须包含数字
  234. //string pattern3 = @"(?=.*\d)";
  235. ////string pattern3 = @"(?=.*[0 - 9])";
  236. ////必须包含特殊符号
  237. //string pattern4 = @"(?=.*[ !""#$%&'()*+,-./:;<=>?@\[\]\^_`{|}~])";
  238. //string pattern4 = @"(?=([\x21-\x7e]+)[^a-zA-Z0-9])";
  239. //至少8个字符,最多32个字符
  240. string pattern5 = @"^.{8,32}$";
  241. if (!Regex.IsMatch(str, pattern5))
  242. {
  243. m_PwdError.gameObject.SetActive(true);
  244. m_PwdErrorStr.text = "密码小于8位数或大于32位";
  245. return;
  246. }
  247. m_PasswordStr = str;
  248. m_PwdErrorStr.text = "";
  249. m_PwdError.gameObject.SetActive(false);
  250. //if (Regex.IsMatch(str, pattern1))
  251. //{
  252. // n++;
  253. //}
  254. //if (Regex.IsMatch(str, pattern2))
  255. //{
  256. // n++;
  257. //}
  258. //if (Regex.IsMatch(str, pattern3))
  259. //{
  260. // n++;
  261. //}
  262. //if (Regex.IsMatch(str, pattern4))
  263. //{
  264. // n++;
  265. //}
  266. //if (n >= 3)
  267. //{
  268. // m_PasswordStr = str;
  269. // m_PwdErrorStr.text = "";
  270. // m_PwdError.gameObject.SetActive(false);
  271. //}
  272. //else
  273. //{
  274. // m_PwdError.gameObject.SetActive(true);
  275. // m_PasswordStr = "";
  276. // m_PwdErrorStr.text = "密码不正确,请重新输入";
  277. //}
  278. }
  279. if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
  280. {
  281. m_Logn.interactable = true;
  282. }
  283. }
  284. /// <summary>
  285. /// 清理密码输入
  286. /// </summary>
  287. private void OnClickEmptyPwd()
  288. {
  289. m_PwdErrorStr.text = "密码不能为空";
  290. m_PwdError.gameObject.SetActive(true);
  291. m_PasswordStr = "";
  292. m_Password.text = "";
  293. m_Logn.interactable = false;
  294. }
  295. /// <summary>
  296. /// 是否可以显示密码
  297. /// </summary>
  298. private void OnclickLockPwd()
  299. {
  300. if (m_Islock)
  301. {
  302. m_Password.contentType = SCInputField.ContentType.Password;
  303. }
  304. else
  305. {
  306. m_Password.contentType = SCInputField.ContentType.Standard;
  307. }
  308. m_Islock = !m_Islock;
  309. }
  310. public class LoginAcct
  311. {
  312. public string acc;
  313. public string pw;
  314. public bool isre;
  315. }
  316. /// <summary>
  317. /// 登录
  318. /// </summary>
  319. private void OnClickLogin()
  320. {
  321. Debug.Log("22222222222222222222222222222222222");
  322. if (string.IsNullOrWhiteSpace(m_AccountStr))
  323. {
  324. //m_AccountError.gameObject.SetActive(true);
  325. m_AccountErrorStr.text = "账号不能为空";
  326. return;
  327. }
  328. if (string.IsNullOrWhiteSpace(m_PasswordStr))
  329. {
  330. //m_PwdError.gameObject.SetActive(true);
  331. m_PwdErrorStr.text = "密码不能为空";
  332. return;
  333. }
  334. if (m_RemenberPwd.isOn)
  335. {
  336. LoginAcct la = new LoginAcct();
  337. la.acc = m_AccountStr;
  338. la.pw = m_PasswordStr;
  339. la.isre = true;
  340. string msg = JsonConvert.SerializeObject(la);
  341. string path = Application.persistentDataPath + "/Login/";
  342. using (System.IO.StreamWriter writer = System.IO.File.CreateText(path + "Login.txt"))
  343. {
  344. writer.Write(msg);
  345. //writer.
  346. }
  347. }
  348. else
  349. {
  350. LoginAcct la = new LoginAcct();
  351. la.acc = "";
  352. la.pw = "";
  353. la.isre = false;
  354. string msg = JsonConvert.SerializeObject(la);
  355. string path = Application.persistentDataPath + "/Login/";
  356. using (System.IO.StreamWriter writer = System.IO.File.CreateText(path + "Login.txt"))
  357. {
  358. writer.Write(msg);
  359. //writer.
  360. }
  361. }
  362. //向服务器发送账号和密码进行验证
  363. // Debug.Log("向服务器发送账号和密码进行登录");
  364. SendLogin sendLogin = new SendLogin();
  365. sendLogin.email = m_AccountStr;
  366. sendLogin.password = m_PasswordStr;
  367. sendLogin.remember = m_IsRemberPwd;
  368. if(DeviceType.type =="Phone")
  369. sendLogin.device = "android";
  370. else
  371. sendLogin.device = "glasses";
  372. UserInfo.Instance.Account = m_AccountStr;
  373. UserInfo.Instance.Password = m_PasswordStr;
  374. string jsonLogin = JsonMapper.ToJson(sendLogin);
  375. // Debug.Log(jsonLogin);
  376. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.login);
  377. HttpTool.Instance.PostLogin("/user/login", jsonLogin, LoginCallBack);
  378. //if (UserInfo.Instance.is20)
  379. //{
  380. // HttpTool.Instance.PostLogin("/user/login", jsonLogin, LoginCallBack2);
  381. //}
  382. //else
  383. //{
  384. // HttpTool.Instance.PostLogin("/user/login", jsonLogin, LoginCallBack);
  385. //}
  386. }
  387. /// <summary>
  388. /// 登录返回数据
  389. /// </summary>
  390. /// <param name="message"></param>
  391. public void LoginCallBack(string mes)
  392. {
  393. Debug.Log("LoginCallBack++++" + mes);
  394. JObject obj = JObject.Parse(mes);
  395. if (obj["code"].ToString() != "200")
  396. {
  397. m_Logn.interactable = true;
  398. m_AccountError.gameObject.SetActive(true);
  399. m_AccountErrorStr.text = obj["message"].ToString();
  400. UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
  401. return;
  402. }
  403. else
  404. {
  405. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getUserInfo);
  406. UserInfo.Instance.Token = obj["data"]["token"].ToString();
  407. COSDownLoad.Instance.Credential();
  408. HttpTool.Instance.Get("/user/getUserInfo", GetUserInfoCallBack);
  409. initMQtt();
  410. // StartCoroutine(LoginCallBackYS(3f));
  411. }
  412. }
  413. private void initMQtt()
  414. {
  415. HttpTool.Instance.Get("/user/emqx/authentication", (msg) =>
  416. {
  417. Debug.Log("DGJ ===> MQTT Callback " + msg);
  418. JsonData data = JsonMapper.ToObject(msg);
  419. if (data["code"].ToString() == "200")
  420. {
  421. MQTTClient.Instance.setData(data["data"]);
  422. MQTTClient.Instance.Connect();
  423. }
  424. else
  425. {
  426. Debug.LogError("MQTT username 请求失败 " + data["code"].ToString());
  427. }
  428. });
  429. }
  430. public void GetUserInfoCallBack(string msg)
  431. {
  432. JObject jobect = JObject.Parse(msg);
  433. Debug.Log("DGJ ===> "+jobect["code"].ToString());
  434. if(int.Parse( jobect["code"].ToString()) == 200)
  435. {
  436. Debug.Log("DGJ ===> " + jobect["data"]["type"].ToString());
  437. if (int.Parse(jobect["data"]["type"].ToString()) == 0)
  438. {
  439. Debug.Log(jobect["data"]["type"].ToString());
  440. UserInfo.Instance.is20 = true;
  441. StartCoroutine( LoginCallBack2YS(2));
  442. }
  443. else if (int.Parse(jobect["data"]["type"].ToString()) == 1)
  444. {
  445. Debug.Log(jobect["data"]["type"].ToString());
  446. UserInfo.Instance.is20 = false;
  447. StartCoroutine( LoginCallBackYS(2));
  448. }
  449. else
  450. return;
  451. }
  452. else
  453. {
  454. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), "/user/getUserInfo 通讯出错 请尝试重启应用");
  455. }
  456. }
  457. private IEnumerator LoginCallBack2YS( float times)
  458. {
  459. // yield return new WaitForSeconds(times);
  460. yield return new WaitForFixedUpdate();
  461. UserManager.Instance.loginBack(true);
  462. if (DeviceType.type != "Phone")
  463. GameManager.Instance.arcamre.SetActive(true);
  464. else
  465. {
  466. OpenXRCamera.Instance.head.gameObject.AddComponent<VuforiaBehaviour>();
  467. OpenXRCamera.Instance.head.gameObject.AddComponent<DefaultInitializationErrorHandler>();
  468. }
  469. GameManager.Instance.immser.SetActive(false);
  470. }
  471. private IEnumerator LoginCallBackYS(float times)
  472. {
  473. // yield return new WaitForSeconds(times);
  474. yield return new WaitForFixedUpdate();
  475. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getMaterialValue);
  476. StartCoroutine(GetAllMaterials(UserInfo.Instance.Token));
  477. if (DeviceType.type =="Phone")
  478. GameManager.Instance.arcamre.SetActive(false);
  479. GameManager.Instance.immser.SetActive(true);
  480. }
  481. /// <summary>
  482. /// 获取账号下的场景返回数据
  483. /// </summary>
  484. /// <param name="message"></param>
  485. private IEnumerator GetAllSceneDataCallBack(string message)
  486. {
  487. Debug.Log("账号下的场景返回数据: " + message);
  488. if (!string.IsNullOrWhiteSpace(message))
  489. {
  490. JObject jobject = JObject.Parse(message);
  491. if (jobject["code"].ToString() == "200")
  492. {
  493. message = jobject["data"]["list"].ToString();
  494. if (!string.IsNullOrWhiteSpace(message))
  495. {
  496. List<SceneValue> listScenesPage = JsonConvert.DeserializeObject<List<SceneValue>>(message);
  497. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfo);
  498. yield return StartCoroutine(WaitSnInfo(listScenesPage));
  499. }
  500. }
  501. else
  502. {
  503. UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
  504. m_Logn.interactable = true;
  505. m_AccountError.gameObject.SetActive(true);
  506. m_AccountErrorStr.text = "账号下的场景数据获取失败";
  507. }
  508. }
  509. Debug.LogError("获取场景列表失败");
  510. }
  511. /// <summary>
  512. /// 获取账号下的场景返回数据
  513. /// </summary>
  514. /// <param name="message"></param>
  515. private void GetAllSceneDataCallBack2(string message)
  516. {
  517. Debug.Log("账号下的场景返回数据: " + message);
  518. if (!string.IsNullOrWhiteSpace(message))
  519. {
  520. JObject jobject = JObject.Parse(message);
  521. if (jobject["code"].ToString() == "200")
  522. {
  523. message = jobject["data"]["list"].ToString();
  524. if (!string.IsNullOrWhiteSpace(message))
  525. {
  526. List<SceneValue> listScenesPage = JsonConvert.DeserializeObject<List<SceneValue>>(message);
  527. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfo);
  528. StartCoroutine(WaitSnInfo(listScenesPage));
  529. }
  530. }
  531. else
  532. {
  533. UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
  534. m_Logn.interactable = true;
  535. m_AccountError.gameObject.SetActive(true);
  536. m_AccountErrorStr.text = "账号下的场景数据获取失败";
  537. }
  538. }
  539. Debug.LogError("获取场景列表失败");
  540. }
  541. /// <summary>
  542. /// 绑定设备
  543. /// </summary>
  544. /// <param name="scenes"></param>
  545. /// <returns></returns>
  546. IEnumerator WaitSnInfo(List<SceneValue> scenes)
  547. {
  548. GameManager.Instance.sucessvalues = new List<SceneValue>();
  549. List<SceneValue> failevalues = new List<SceneValue>();
  550. bool finish = false;
  551. for (int i = 0; i < scenes.Count; i++)
  552. {
  553. SendSnInfo sendNet = new SendSnInfo();
  554. sendNet.sn = SendSN.GetSN();
  555. //sendNet.sn = "Nreal-SN";
  556. //API_GSXR_Slam.SlamManager.plugin.SN;
  557. sendNet.projectId = scenes[i].id;
  558. string jsonData = JsonMapper.ToJson(sendNet);
  559. yield return StartCoroutine(HttpTool.Instance.SendHttp("/client/snInfo", jsonData, (message) =>
  560. {
  561. JObject jobject = JObject.Parse(message);
  562. if (jobject["code"].ToString() == "200")
  563. {
  564. GameManager.Instance.sucessvalues.Add(scenes[i]);
  565. }
  566. else
  567. {
  568. failevalues.Add(scenes[i]);
  569. }
  570. finish = true;
  571. }));
  572. }
  573. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.initscene);
  574. string str = string.Format("{0}个场景绑定成功,{1}个场景绑定失败", GameManager.Instance.sucessvalues.Count, failevalues.Count);
  575. // Debug.Log(str);
  576. ((LoadingPanel)UIManager.Instance.GetUI(UINameConfig.LoadingPanel)).TextStr = str;
  577. yield return new WaitForSeconds(1f);
  578. yield return finish;
  579. UIManager.Instance.ShowUI(UINameConfig.SceneChoose, typeof(SceneChoose), GameManager.Instance.sucessvalues);
  580. UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
  581. Hide();
  582. }
  583. List<DownLoadMaterial> listMaterail = new List<DownLoadMaterial>();
  584. /// <summary>
  585. /// 获取素材库列表
  586. /// </summary>
  587. /// <param name="mes"></param>
  588. /// <returns></returns>
  589. IEnumerator GetAllMaterials(string mes)
  590. {
  591. string message = "";
  592. yield return StartCoroutine(HttpTool.Instance.SendHttp("/material/init", mes, (m) =>
  593. {
  594. message = m;
  595. },false));
  596. yield return null;
  597. if (!string.IsNullOrWhiteSpace(message))
  598. {
  599. JObject jObject = JObject.Parse(message);
  600. if (jObject["code"].ToString() == "200")
  601. {
  602. //处理素材库信息
  603. string data = jObject["data"].ToString();
  604. JObject dataObject = JObject.Parse(data);
  605. string single = dataObject["single"].ToString();
  606. string library = dataObject["library"].ToString();
  607. string combination = dataObject["combination"].ToString();
  608. List<MaterialObl> singleMaterials = new List<MaterialObl>();
  609. List<MaterialObl> libraryMaterials = new List<MaterialObl>();
  610. List<MaterialObl> combinationMaterials = new List<MaterialObl>();
  611. if (!string.IsNullOrWhiteSpace(single))
  612. {
  613. singleMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(single);
  614. DataManager.Instance.AllMaterials.Add("single", singleMaterials);
  615. yield return null;
  616. }
  617. if (!string.IsNullOrWhiteSpace(library))
  618. {
  619. libraryMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(library);
  620. DataManager.Instance.AllMaterials.Add("library", libraryMaterials);
  621. yield return null;
  622. }
  623. if (!string.IsNullOrWhiteSpace(combination))
  624. {
  625. combinationMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(combination);
  626. DataManager.Instance.AllMaterials.Add("combination", combinationMaterials);
  627. yield return null;
  628. }
  629. //CalMat(singleMaterials);
  630. //CalMat(libraryMaterials);
  631. //CalMat(combinationMaterials);
  632. CalMatCOS(singleMaterials);
  633. CalMatCOS(libraryMaterials);
  634. CalMatCOS(combinationMaterials);
  635. DownloadResManager.Instance.DownLoad(listMaterail);
  636. }
  637. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getAllScene);
  638. // HttpTool.Instance.Get("/project/index", GetAllSceneDataCallBack2);
  639. // StartCoroutine(HttpTool.Instance.SendHttp("/project/index", "", GetAllSceneDataCallBack2, false));
  640. string indexmsg = "";
  641. //获取账号下的场景数据
  642. yield return StartCoroutine( HttpTool.Instance.SendHttp("/project/index","", (string msg)=> {
  643. indexmsg = msg;
  644. },false));
  645. if(indexmsg =="")
  646. {
  647. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), "/project/index 通讯出错 请尝试重启应用");
  648. }
  649. else
  650. {
  651. yield return null;
  652. yield return StartCoroutine(GetAllSceneDataCallBack(indexmsg));
  653. }
  654. }
  655. else
  656. {
  657. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), "/material/init 通讯出错 请尝试重启应用");
  658. }
  659. }
  660. private void CalMat(List<MaterialObl> mats)
  661. {
  662. //for (int i = 0; i < mats.Count; i++)
  663. //{
  664. // var mat = mats[i];
  665. // if (!string.IsNullOrWhiteSpace(mat.icon))
  666. // {
  667. // DownloadData data1 = new DownloadData();
  668. // string filename = Path.GetFileName(mat.icon);
  669. // data1.name = filename;
  670. // data1.type = 1;
  671. // data1.downloadPath = mat.icon;
  672. // data1.updateTime = mat.updateTime;
  673. // data1.localSavePath = DownloadManager.Instance.LocaDataPath + "/Icon/" + filename;
  674. // DownloadManager.Instance.AddDownloadData(data1);
  675. // }
  676. // if (mat.materialList != null)
  677. // {
  678. // for (int m = 0; m < mat.materialList.Count; m++)
  679. // {
  680. // var matObj = mat.materialList[m];
  681. // if (int.Parse(matObj.type) != 4)
  682. // {
  683. // DownloadData data = new DownloadData(matObj);
  684. // DownloadManager.Instance.AddDownloadData(data);
  685. // }
  686. // }
  687. // }
  688. //}
  689. }
  690. private void CalMatCOS(List<MaterialObl> mats)
  691. {
  692. for (int i = 0; i < mats.Count; i++)
  693. {
  694. var mat = mats[i];
  695. if (!string.IsNullOrWhiteSpace(mat.icon))
  696. {
  697. DownLoadMaterial data1 = new DownLoadMaterial();
  698. string filename = Path.GetFileName(mat.icon);
  699. data1.downLoadPath = mat.icon;
  700. data1.updataTime = mat.updateTime;
  701. data1.localLoadPath = Application.persistentDataPath + "/Material/" + filename;
  702. listMaterail.Add(data1);
  703. }
  704. if (mat.materialList != null)
  705. {
  706. for (int m = 0; m < mat.materialList.Count; m++)
  707. {
  708. var matObj = mat.materialList[m];
  709. if (matObj.type != 4 && matObj.type != 0)
  710. {
  711. DownLoadMaterial data1 = new DownLoadMaterial();
  712. string filename = Path.GetFileName(matObj.DownloadPath);
  713. data1.downLoadPath = matObj.DownloadPath;
  714. if(downloadMatList.ContainsKey(data1.downLoadPath))
  715. {
  716. downloadMatList[data1.downLoadPath] = mat.updateTime;
  717. }else
  718. {
  719. downloadMatList.Add(data1.downLoadPath,mat.updateTime);
  720. }
  721. data1.updataTime = mat.updateTime;
  722. data1.localLoadPath = Application.persistentDataPath + "/Material/" + filename;
  723. listMaterail.Add(data1);
  724. }
  725. }
  726. }
  727. }
  728. }
  729. public static Dictionary<string, int> downloadMatList = new Dictionary<string, int>();
  730. /// <summary>
  731. /// 是否记住密码
  732. /// </summary>
  733. /// <param name="b"></param>
  734. private void OnRemPwdValueChange(bool b)
  735. {
  736. m_IsRemberPwd = b;
  737. }
  738. /// <summary>
  739. /// 使用SN进行登录
  740. /// </summary>
  741. private void OnClickSnBtn()
  742. {
  743. string sn = SendSN.GetSN();
  744. //string sn = API_GSXR_Slam.SlamManager.plugin.SN;
  745. }
  746. #endregion
  747. protected override void OnInit()
  748. {
  749. base.OnInit();
  750. }
  751. protected override void OnShow(object param)
  752. {
  753. base.OnShow(param);
  754. gameObject.transform.localScale = new Vector3(1, 1, 1);
  755. }
  756. private void Update()
  757. {
  758. if (API_GSXR_Slam.GSXR_Is_SlamInitialized())
  759. {
  760. m_SN.text = SendSN.GetSN();
  761. //m_SN.text = API_GSXR_Slam.SlamManager.plugin.SN;
  762. }
  763. }
  764. protected override void OnHide()
  765. {
  766. base.OnHide();
  767. }
  768. protected override void OnDestroy()
  769. {
  770. base.OnDestroy();
  771. }
  772. }
  773. public class SendInit
  774. {
  775. public string sn { get; set; }
  776. public int projectId { get; set; }
  777. }
  778. public class SendLogin
  779. {
  780. public string email { get; set; }
  781. public string password { get; set; }
  782. public bool remember { get; set; }
  783. public string device { get; set; }
  784. }
  785. public class SendMaterials
  786. {
  787. public string url { get; set; }
  788. }
  789. public class SendSceneDetail
  790. {
  791. public int id { get; set; }
  792. }