SocketIOManager.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using Best.SocketIO;
  6. using Best.HTTP.JSON;
  7. using Best.HTTP.JSON.LitJson;
  8. using ToneTuneToolkit.Data;
  9. public class SocketIOManager : MonoBehaviour
  10. {
  11. public static SocketIOManager Instance;
  12. #region 路径
  13. private string socketioConfigPath = $"{Application.streamingAssetsPath}/configs/socketioconfig.json";
  14. #endregion
  15. #region 配置
  16. private string targetIP;
  17. private string targetPort;
  18. #endregion
  19. private SocketManager manager;
  20. // ==================================================
  21. private void Awake() => Instance = this;
  22. private void Start() => Init();
  23. private void OnDestroy() => Uninit();
  24. // ==================================================
  25. private void Init()
  26. {
  27. targetIP = JsonManager.GetJson(socketioConfigPath, "target_ip");
  28. targetPort = JsonManager.GetJson(socketioConfigPath, "target_port");
  29. manager = new SocketManager(
  30. new Uri($"https://{targetIP}"),
  31. // new Uri($"https://{targetIP}:{targetPort}"),
  32. new SocketOptions
  33. {
  34. // AdditionalQueryParams = new ObservableDictionary<string, string> { { "type", "machine" } }, // 识别用途
  35. AutoConnect = false
  36. });
  37. manager.Socket.On(SocketIOEventTypes.Connect, OnConnected);
  38. manager.Socket.On<BrandStartData>(@"brand-start", ReceiveData);
  39. SwitchSocketIO(true);
  40. return;
  41. }
  42. private void Uninit()
  43. {
  44. SwitchSocketIO(false);
  45. return;
  46. }
  47. // ==================================================
  48. // 绑定事件
  49. private void OnConnected()
  50. {
  51. Debug.Log("[SocketIO Manager] Connected!");
  52. return;
  53. }
  54. private void ReceiveData(BrandStartData value)
  55. {
  56. GameManager.Instance.SetInData(value);
  57. // JsonData jd = JsonMapper.ToObject(receive);
  58. // Debug.Log(jd["video_code"]);
  59. // MessageProcessor.Instance.SendMessageOut(jd["video_code"].ToString());
  60. return;
  61. }
  62. // ==================================================
  63. /// <summary>
  64. /// 发送消息
  65. /// </summary>
  66. /// <param name="eventName"></param>
  67. /// <param name="message"></param>
  68. public void MessageSend(string eventName, object message)
  69. {
  70. manager.Socket.Emit(eventName, message);
  71. Debug.Log($"<color=white>[Socket IO]</color> Message [<color=white>{message}</color>].");
  72. return;
  73. }
  74. // ==================================================
  75. /// <summary>
  76. /// 端口开关
  77. /// </summary>
  78. /// <param name="value"></param>
  79. public void SwitchSocketIO(bool value)
  80. {
  81. if (value)
  82. {
  83. manager.Open();
  84. }
  85. else
  86. {
  87. manager.Close();
  88. }
  89. return;
  90. }
  91. // ==================================================
  92. // 数据类
  93. [Serializable]
  94. public class BrandStartData
  95. {
  96. public string uuid;
  97. public string clock;
  98. public string start_code;
  99. }
  100. [Serializable]
  101. public class BrandStopData
  102. {
  103. public string clock;
  104. public string start_code;
  105. }
  106. }