ItemUseWebCommController.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Newtonsoft.Json;
  2. using NUnit.Framework;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using UnityEngine;
  7. using UnityEngine.SceneManagement;
  8. /* 本代码主要是因为Unity限制Monobehavior不能new()。
  9. * 因此在本类中监控ItemUseController._itemUseId 一旦不是null就触发网络通讯
  10. * 本代码用于Home场景,挂载在Player组件下
  11. */
  12. public class ItemUseWebCommController : MonoBehaviour
  13. {
  14. // Start is called once before the first execution of Update after the MonoBehaviour is created
  15. //void Start()
  16. //{
  17. //}
  18. // Update is called once per frame
  19. void Update()
  20. {
  21. if (ItemUseController._itemUseId != null)
  22. {
  23. ItemUsePost(ItemUseController._itemUseId);
  24. ItemUseController._itemUseId = null;
  25. }
  26. }
  27. // Post道具使用时网络通讯
  28. void ItemUsePost(string itemId)
  29. {
  30. Debug.Log("Item use Post request");
  31. List<string> dogsList = new List<string>();
  32. foreach (var dog in UserProperty.dogs)
  33. {
  34. dogsList.Add(dog.d_id);
  35. }
  36. string dogsJson = JsonConvert.SerializeObject(dogsList);
  37. // 提交POST
  38. string url = "/api/item/use/";
  39. WWWForm form = new();
  40. form.AddField("user_id", UserProperty.userId);
  41. form.AddField("item_id", itemId);
  42. form.AddField("dog_list", dogsJson);
  43. form.AddField("date_time", DateTime.Now.ToString()); // 可选项,以服务器时间为准
  44. StartCoroutine(WebController.PostRequest(url, form, callback: ItemUseCallback));
  45. }
  46. // Post道具使用网络通讯后Callback
  47. void ItemUseCallback(string json)
  48. {
  49. var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
  50. if (data != null && data["status"].ToString() == "success")
  51. {
  52. var user_info = JsonConvert.DeserializeObject<Dictionary<string, string>>(data["user_info"].ToString());
  53. UserProperty.name = user_info["user_name"];
  54. UserProperty.coin = int.Parse(user_info["coin"]);
  55. UserProperty.mobile = user_info["mobile"];
  56. UserProperty.email = user_info["email"];
  57. UserProperty.level = user_info["level"];
  58. UserProperty.isRegUser = bool.Parse(user_info["isRegUser"]);
  59. // 清空现有数据保存狗的数据
  60. DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
  61. UserProperty.dogs.Clear();
  62. foreach (var dog in dogProperties)
  63. {
  64. UserProperty.dogs.Add(dog);
  65. }
  66. }
  67. else
  68. {
  69. Debug.Log(data["message"]);
  70. }
  71. }
  72. }