using System; using System.Collections; using System.Collections.Generic; using Newtonsoft.Json; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; /// /// 后端对接专用 /// public class BackendNetManager : MonoBehaviour { public static BackendNetManager Instance; // ================================================== private void Awake() => Instance = this; private void Start() => Init(); // private void Update() // { // if (Input.GetKeyUp(KeyCode.U)) // { // string testPath = @"D:\2024-06-03-21-28-17.png"; // UploadPhoto2Backend(ToneTuneToolkit.Media.TextureProcessor.ReadTexture(testPath)); // } // } // ================================================== private void Init() { GetStartupQR(); return; } // ================================================== #region 获取启动QR码 public event UnityAction OnGetStartupInfoComplete; public StartupQRResponse QRData; private const string qrURL = "https://open.skyelook.com/api/longine_gz/startQr"; private const string deviceCode = "Test_001"; public void GetStartupQR() { StartCoroutine("GetStartupQRAction"); return; } private IEnumerator GetStartupQRAction() { WWWForm wwwForm = new WWWForm(); wwwForm.AddField("device_code", deviceCode); using (UnityWebRequest www = UnityWebRequest.Post(qrURL, wwwForm)) // 获取二维码链接 { // www.SetRequestHeader("Content-Type", "multipart/form-data"); // 永远永远不要用这个 www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); DownloadHandler downloadHandler = new DownloadHandlerBuffer(); www.downloadHandler = downloadHandler; yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log($"{www.error}...[ER]"); yield break; } else { Debug.Log($"QRCode Json :\n{www.downloadHandler.text}...[OK]"); QRData = JsonConvert.DeserializeObject(www.downloadHandler.text.ToString()); if (OnGetStartupInfoComplete != null) { OnGetStartupInfoComplete(QRData.data.start_code); } Debug.Log("QRCode Json...[OK]"); } } // using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(QRData.data.qr_url)) // 获取二维码 // { // yield return www.SendWebRequest(); // if (www.result != UnityWebRequest.Result.Success) // { // Debug.Log($"{www.error}...[ER]"); // yield break; // } // else // { // if (OnGetStartupQRComplete != null) // { // OnGetStartupQRComplete(DownloadHandlerTexture.GetContent(www)); // } // Debug.Log("QRCode Image...[OK]"); // StartCoroutine("QueryUserStatus"); // 启动轮询 // } // } yield break; } [Serializable] public class StartupQRResponse { public int code; public string message; public StartupQRData data; } [Serializable] public class StartupQRData { public string start_code; public string qr_url; } #endregion // ================================================== #region 轮询是否有玩家在玩 // public event UnityAction OnUserActive; // public StatusResponse StatusData; // private const string statusURL = "https://open.skyelook.com/api/longine_gz/startStatus"; // private IEnumerator QueryUserStatus() // { // WWWForm wwwForm = new WWWForm(); // wwwForm.AddField("device_code", deviceCode); // wwwForm.AddField("start_code", QRData.data.start_code); // using (UnityWebRequest www = UnityWebRequest.Post(statusURL, wwwForm)) // { // www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // www.downloadHandler = new DownloadHandlerBuffer(); // yield return www.SendWebRequest(); // if (www.result != UnityWebRequest.Result.Success) // { // Debug.Log($"{www.error}...[ER]"); // yield break; // } // else // { // StatusData = JsonConvert.DeserializeObject(www.downloadHandler.text); // // Debug.Log($"{www.downloadHandler.text}...[OK]"); // Debug.Log("Query...[OK]"); // } // } // // 轮询 // 启动游戏 // switch (StatusData.data.status) // { // default: break; // case "0": // yield return new WaitForSeconds(2f); // StartCoroutine("QueryUserStatus"); // break; // case "1": // if (OnUserActive != null) // { // OnUserActive(); // } // StopCoroutine("QueryUserStatus"); // break; // case "2": break; // case "3": break; // } // yield break; // } // [Serializable] // public class StatusResponse // { // public int code; // public string message; // public StatusResponseData data; // } // [Serializable] // public class StatusResponseData // { // public string status; // public string status_text; // } #endregion // ================================================== #region 上传图片 public UploadResponse UploadData; public event UnityAction OnUpload; private const string uploadURL = "https://open.skyelook.com/api/longine_gz/uploadThumb"; public void UploadPhoto2Backend(Texture2D texture2D) { StartCoroutine(UploadPhoto2BackendAction(texture2D)); return; } private IEnumerator UploadPhoto2BackendAction(Texture2D texture2D) { byte[] bytes = texture2D.EncodeToPNG(); // 图转比特流 string base64 = "data:image/png;base64," + Convert.ToBase64String(bytes); WWWForm wwwForm = new WWWForm(); wwwForm.AddField("device_code", deviceCode); wwwForm.AddField("start_code", QRData.data.start_code); wwwForm.AddField("file", base64); // wwwForm.AddBinaryData("file", bytes); using (UnityWebRequest www = UnityWebRequest.Post(uploadURL, wwwForm)) { www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); www.downloadHandler = new DownloadHandlerBuffer(); yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log($"{www.error}...[ER]"); yield break; } else { Debug.Log("Upload...[OK]"); Debug.Log(www.downloadHandler.text.ToString()); UploadData = JsonConvert.DeserializeObject(www.downloadHandler.text.ToString()); } } using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(UploadData.data.qr_url)) // 搞最终QR图 // DEBUG { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log($"{www.error}...[ER]"); yield break; } else { if (OnUpload != null) { OnUpload(DownloadHandlerTexture.GetContent(www)); } Debug.Log("Final QRCode...[OK]"); } } yield break; } [Serializable] public class UploadResponse { public int code; public string message; public UploadResponseData data; } [Serializable] public class UploadResponseData { public string file_url; public string qr_url; } #endregion }