1
0

BackendNetManager.cs 7.5 KB

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