BackendNetManager.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using Newtonsoft.Json;
  5. using UnityEngine;
  6. using UnityEngine.Events;
  7. using UnityEngine.Networking;
  8. namespace LonginesYogaPhotoJoy
  9. {
  10. /// <summary>
  11. /// 后端对接专用
  12. /// </summary>
  13. public class BackendNetManager : MonoBehaviour
  14. {
  15. public static BackendNetManager Instance;
  16. // ==================================================
  17. private void Awake()
  18. {
  19. Instance = this;
  20. }
  21. private void Start()
  22. {
  23. Init();
  24. }
  25. // private void Update()
  26. // {
  27. // if (Input.GetKeyUp(KeyCode.U))
  28. // {
  29. // string testPath = @"D:\2024-06-03-21-28-17.png";
  30. // UploadPhoto2Backend(ToneTuneToolkit.Media.TextureProcessor.ReadTexture(testPath));
  31. // }
  32. // }
  33. // ==================================================
  34. private void Init()
  35. {
  36. GetStartupQR();
  37. return;
  38. }
  39. // ==================================================
  40. #region 获取启动QR码
  41. public event UnityAction<string> OnGetStartupInfoComplete;
  42. public StartupQRResponse QRData;
  43. private const string qrURL = "https://open.skyelook.com/api/longine_gz/startQr";
  44. private const string deviceCode = "Test_001";
  45. public void GetStartupQR()
  46. {
  47. StartCoroutine("GetStartupQRAction");
  48. return;
  49. }
  50. private IEnumerator GetStartupQRAction()
  51. {
  52. WWWForm wwwForm = new WWWForm();
  53. wwwForm.AddField("device_code", deviceCode);
  54. using (UnityWebRequest www = UnityWebRequest.Post(qrURL, wwwForm)) // 获取二维码链接
  55. {
  56. // www.SetRequestHeader("Content-Type", "multipart/form-data"); // 永远永远不要用这个
  57. www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  58. DownloadHandler downloadHandler = new DownloadHandlerBuffer();
  59. www.downloadHandler = downloadHandler;
  60. yield return www.SendWebRequest();
  61. if (www.result != UnityWebRequest.Result.Success)
  62. {
  63. Debug.Log($"{www.error}...<color=red>[ER]</color>");
  64. yield break;
  65. }
  66. else
  67. {
  68. Debug.Log($"QRCode Json :\n{www.downloadHandler.text}...<color=green>[OK]</color>");
  69. QRData = JsonConvert.DeserializeObject<StartupQRResponse>(www.downloadHandler.text.ToString());
  70. if (OnGetStartupInfoComplete != null)
  71. {
  72. OnGetStartupInfoComplete(QRData.data.start_code);
  73. }
  74. Debug.Log("QRCode Json...<color=green>[OK]</color>");
  75. }
  76. }
  77. // using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(QRData.data.qr_url)) // 获取二维码
  78. // {
  79. // yield return www.SendWebRequest();
  80. // if (www.result != UnityWebRequest.Result.Success)
  81. // {
  82. // Debug.Log($"{www.error}...<color=red>[ER]</color>");
  83. // yield break;
  84. // }
  85. // else
  86. // {
  87. // if (OnGetStartupQRComplete != null)
  88. // {
  89. // OnGetStartupQRComplete(DownloadHandlerTexture.GetContent(www));
  90. // }
  91. // Debug.Log("QRCode Image...<color=green>[OK]</color>");
  92. // StartCoroutine("QueryUserStatus"); // 启动轮询
  93. // }
  94. // }
  95. yield break;
  96. }
  97. [Serializable]
  98. public class StartupQRResponse
  99. {
  100. public int code;
  101. public string message;
  102. public StartupQRData data;
  103. }
  104. [Serializable]
  105. public class StartupQRData
  106. {
  107. public string start_code;
  108. public string qr_url;
  109. }
  110. #endregion
  111. // ==================================================
  112. #region 轮询是否有玩家在玩
  113. // public event UnityAction OnUserActive;
  114. // public StatusResponse StatusData;
  115. // private const string statusURL = "https://open.skyelook.com/api/longine_gz/startStatus";
  116. // private IEnumerator QueryUserStatus()
  117. // {
  118. // WWWForm wwwForm = new WWWForm();
  119. // wwwForm.AddField("device_code", deviceCode);
  120. // wwwForm.AddField("start_code", QRData.data.start_code);
  121. // using (UnityWebRequest www = UnityWebRequest.Post(statusURL, wwwForm))
  122. // {
  123. // www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  124. // www.downloadHandler = new DownloadHandlerBuffer();
  125. // yield return www.SendWebRequest();
  126. // if (www.result != UnityWebRequest.Result.Success)
  127. // {
  128. // Debug.Log($"{www.error}...<color=red>[ER]</color>");
  129. // yield break;
  130. // }
  131. // else
  132. // {
  133. // StatusData = JsonConvert.DeserializeObject<StatusResponse>(www.downloadHandler.text);
  134. // // Debug.Log($"{www.downloadHandler.text}...<color=green>[OK]</color>");
  135. // Debug.Log("Query...<color=green>[OK]</color>");
  136. // }
  137. // }
  138. // // 轮询 // 启动游戏
  139. // switch (StatusData.data.status)
  140. // {
  141. // default: break;
  142. // case "0":
  143. // yield return new WaitForSeconds(2f);
  144. // StartCoroutine("QueryUserStatus");
  145. // break;
  146. // case "1":
  147. // if (OnUserActive != null)
  148. // {
  149. // OnUserActive();
  150. // }
  151. // StopCoroutine("QueryUserStatus");
  152. // break;
  153. // case "2": break;
  154. // case "3": break;
  155. // }
  156. // yield break;
  157. // }
  158. // [Serializable]
  159. // public class StatusResponse
  160. // {
  161. // public int code;
  162. // public string message;
  163. // public StatusResponseData data;
  164. // }
  165. // [Serializable]
  166. // public class StatusResponseData
  167. // {
  168. // public string status;
  169. // public string status_text;
  170. // }
  171. #endregion
  172. // ==================================================
  173. #region 上传图片
  174. public UploadResponse UploadData;
  175. public event UnityAction<Texture2D> OnUpload;
  176. private const string uploadURL = "https://open.skyelook.com/api/longine_gz/uploadThumb";
  177. public void UploadPhoto2Backend(Texture2D texture2D)
  178. {
  179. StartCoroutine(UploadPhoto2BackendAction(texture2D));
  180. return;
  181. }
  182. private IEnumerator UploadPhoto2BackendAction(Texture2D texture2D)
  183. {
  184. byte[] bytes = texture2D.EncodeToPNG(); // 图转比特流
  185. string base64 = "data:image/png;base64," + Convert.ToBase64String(bytes);
  186. WWWForm wwwForm = new WWWForm();
  187. wwwForm.AddField("device_code", deviceCode);
  188. wwwForm.AddField("start_code", QRData.data.start_code);
  189. wwwForm.AddField("file", base64);
  190. // wwwForm.AddBinaryData("file", bytes);
  191. using (UnityWebRequest www = UnityWebRequest.Post(uploadURL, wwwForm))
  192. {
  193. www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  194. www.downloadHandler = new DownloadHandlerBuffer();
  195. yield return www.SendWebRequest();
  196. if (www.result != UnityWebRequest.Result.Success)
  197. {
  198. Debug.Log($"{www.error}...<color=red>[ER]</color>");
  199. yield break;
  200. }
  201. else
  202. {
  203. Debug.Log("Upload...<color=green>[OK]</color>");
  204. Debug.Log(www.downloadHandler.text.ToString());
  205. UploadData = JsonConvert.DeserializeObject<UploadResponse>(www.downloadHandler.text.ToString());
  206. }
  207. }
  208. using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(UploadData.data.qr_url)) // 搞最终QR图 // DEBUG
  209. {
  210. yield return www.SendWebRequest();
  211. if (www.result != UnityWebRequest.Result.Success)
  212. {
  213. Debug.Log($"{www.error}...<color=red>[ER]</color>");
  214. yield break;
  215. }
  216. else
  217. {
  218. if (OnUpload != null)
  219. {
  220. OnUpload(DownloadHandlerTexture.GetContent(www));
  221. }
  222. Debug.Log("Final QRCode...<color=green>[OK]</color>");
  223. }
  224. }
  225. yield break;
  226. }
  227. [Serializable]
  228. public class UploadResponse
  229. {
  230. public int code;
  231. public string message;
  232. public UploadResponseData data;
  233. }
  234. [Serializable]
  235. public class UploadResponseData
  236. {
  237. public string file_url;
  238. public string qr_url;
  239. }
  240. #endregion
  241. }
  242. }