WebController.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using UnityEngine;
  7. using UnityEngine.Networking;
  8. using UnityEngine.SceneManagement;
  9. /* 本文件二次封装Web request
  10. * 不需要客户端确认是否需要提交accss_token,access_token白名单在EnviromentSetting里面
  11. * PostRequest 需要提交url, wwwForm, 上传附件path, 回调函数
  12. */
  13. public class WebController : MonoBehaviour {
  14. // Start is called before the first frame update
  15. //void Start()
  16. //{
  17. //}
  18. // Update is called once per frame
  19. //void Update()
  20. //{
  21. //}
  22. public static IEnumerator PostRequest(string url, WWWForm wwwForm, string filePath = null, System.Action<string> callback=null)
  23. {
  24. // 检测是否需要添加access_token
  25. bool accessTokenReq = true;
  26. if (EnviromentSetting.accessTokenWhiteList.Contains<string>(url))
  27. {
  28. accessTokenReq = false;
  29. }
  30. // 添加access token
  31. if (accessTokenReq)
  32. {
  33. // 如果access token过期,跳转登录场景
  34. TimeSpan ts = DateTime.Now - EnviromentSetting.accessTokenReceivedTime;
  35. if (ts.TotalHours >= 24)
  36. {
  37. GameData.subScene = null;
  38. SceneManager.LoadScene("Login");
  39. }
  40. else
  41. {
  42. wwwForm.AddField("access_token", EnviromentSetting.accessToken);
  43. }
  44. }
  45. // 添加文件
  46. if (filePath != null)
  47. {
  48. byte[] fileData = System.IO.File.ReadAllBytes(filePath);
  49. wwwForm.AddBinaryData(Path.GetFileName(filePath), fileData);
  50. }
  51. wwwForm.AddField("date_time", DateTime.Now.ToString()); // 可选项,以服务器时间为准
  52. // 创建 UnityWebRequest 对象
  53. url = EnviromentSetting.serverIp + url;
  54. using (UnityWebRequest request = UnityWebRequest.Post(url, wwwForm))
  55. {
  56. // 发送请求并等待响应
  57. yield return request.SendWebRequest();
  58. // 检查是否有错误
  59. if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
  60. {
  61. Debug.Log("上传失败: " + request.error);
  62. if (request.error == "Cannot connect to destination host")
  63. {
  64. string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "game_message", "network_error", EnviromentSetting.languageCode });
  65. MessageBoxController.ShowMessage(msg, () => Application.Quit());
  66. }
  67. Debug.Log("上传失败信息: " + request.downloadHandler.text);
  68. }
  69. else
  70. {
  71. // 上传成功,获取服务器响应
  72. string responseText = request.downloadHandler.text;
  73. callback?.Invoke(responseText);
  74. Debug.Log("上传成功!服务器响应: " + responseText);
  75. }
  76. }
  77. }
  78. }