using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using Cysharp.Threading.Tasks; using DefaultNamespace; using DG.Tweening; using Newtonsoft.Json; using UnityEngine; public class MqttManager : MonoSingleton { /// /// 所有设备的请求头 /// public List devices = new List(); /// /// 换电池装置 /// public List qcbdequipments = new List(); /// /// 查询提升机 /// public List elvequipments = new List(); /// /// 拆码垛机 /// public List dpmequipments = new List(); /// /// 输送机设备 /// public List convoyorequipments = new List(); /// /// 输入机设备 /// public List exportations = new List(); /// /// 小车设备 /// public List carequipments = new List(); /// /// 查询式落地机 /// public List feequipments = new List(); /// /// 查训加去盖信息 /// public List cmequipments = new List(); /// /// 消息队列 /// public ConcurrentQueue messageQueue = new ConcurrentQueue(); /// /// 第一层箱子 /// public List firstbox = new List(); /// /// 第二层箱子 /// public List secondbox = new List(); /// /// 小车位移的速度 /// public float speed = 5f; [Obsolete] private void Awake() { //启动MQTT连接 Application.ExternalCall("OpenHtmlMQTT"); ProcessQueue().Forget(); } private void Start() { } /// /// 接受MQTT消息 /// /// public void Message(string message) { // Debug.Log($"接收到的MQTT消息---->{message}"); messageQueue.Enqueue(message); // 将消息存入队列 } private async UniTaskVoid ProcessQueue() { while (true) { if (messageQueue.TryDequeue(out string message)) { // 处理消息 Debug.Log($"剩余:{messageQueue.Count}条数据,取数据-----> {message}"); //await UniTask.Delay(10); Allequipment str = JsonConvert.DeserializeObject(message); //Debug.Log("获取到了数据"); //Debug.Log(str.device + " " + str.message); devices.Add(str); string data = str.device.Substring(0, 2); switch (data) { case "qc": Qcbd qcbd = JsonConvert.DeserializeObject(str.message); qcbdequipments.Add(qcbd); break; case "el": Elvequipment elvequipment = JsonConvert.DeserializeObject(str.message); elvequipments.Add(elvequipment); break; case "dp": Dpmequipment dpmequipment = JsonConvert.DeserializeObject(str.message); dpmequipments.Add(dpmequipment); break; case "co": Convoyorequipment convoyorequipment = JsonConvert.DeserializeObject(str.message); string con = convoyorequipment.Id.Substring(0, 2); //Debug.Log(con); if (con == "54") { convoyorequipments.Add(convoyorequipment); } else { exportations.Add(convoyorequipment); } break; case "ca": Carequipment carequipment = JsonConvert.DeserializeObject(str.message); string carname = str.device; GameObject cargame = GameObject.Find(carname); Carpoint(cargame, carequipment); break; case "fe": Feequipment feequipment = JsonConvert.DeserializeObject(str.message); feequipments.Add(feequipment); break; case "cm": Cmequipment cmequipment = JsonConvert.DeserializeObject(str.message); cmequipments.Add(cmequipment); break; default: break; } await UniTask.Delay(10); } else { Debug.Log("等待数据"); await UniTask.Delay(1000); } } } public void Carpoint(GameObject car, Carequipment carequipment) { Debug.Log(carequipment.id); if (car) { Carinformation carbox = car.GetComponent(); carbox.BoxCode = carequipment.CarState_BoxCode; string point = carequipment.CarState_Car_Column + "-" + carequipment.CarState_Car_Row + "-" + carequipment.CarState_Car_Layer; GameObject displacement = GameObject.Find(point); //car.transform.DOMove(displacement.transform.position, Vector3.Distance(car.transform.position, displacement.transform.position) / speed).SetEase(Ease.InOutQuad); Designateddisplacement(car, displacement.transform.position, speed); if (carequipment.CarState_CarPlt == "上升") { BoxCollider cars = car.GetComponent(); cars.enabled = true; } else if (carequipment.CarState_CarPlt == "下降") { GameObject box = car.transform.GetChild(0).gameObject; float dis = box.transform.position.y - 0.3f; box.transform.DOMoveY(dis, 0.2f).SetEase(Ease.OutQuad); car.transform.SetParent(null); } else { BoxCollider cars = car.GetComponent(); cars.enabled = false; } } } /// /// 需要位移的地方 /// /// 小车 /// 位移到指定位置 /// 位移的速度 public void Designateddisplacement(GameObject car, Vector3 dis, float speed) { float times = Vector3.Distance(car.transform.position, dis) / speed; car.transform.DOMove(dis, times).SetEase(Ease.InOutQuad); } }