U3D_TobaccoWarehouseISMDTSy.../Assets/Scripts/MqttManager.cs

205 lines
7.3 KiB
C#

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<MqttManager>
{
/// <summary>
/// 所有设备的请求头
/// </summary>
public List<Allequipment> devices = new List<Allequipment>();
/// <summary>
/// 换电池装置
/// </summary>
public List<Qcbd> qcbdequipments = new List<Qcbd>();
/// <summary>
/// 查询提升机
/// </summary>
public List<Elvequipment> elvequipments = new List<Elvequipment>();
/// <summary>
/// 拆码垛机
/// </summary>
public List<Dpmequipment> dpmequipments = new List<Dpmequipment>();
/// <summary>
/// 输送机设备
/// </summary>
public List<Convoyorequipment> convoyorequipments = new List<Convoyorequipment>();
/// <summary>
/// 输入机设备
/// </summary>
public List<Convoyorequipment> exportations = new List<Convoyorequipment>();
/// <summary>
/// 小车设备
/// </summary>
public List<Carequipment> carequipments = new List<Carequipment>();
/// <summary>
/// 查询式落地机
/// </summary>
public List<Feequipment> feequipments = new List<Feequipment>();
/// <summary>
/// 查训加去盖信息
/// </summary>
public List<Cmequipment> cmequipments = new List<Cmequipment>();
/// <summary>
/// 消息队列
/// </summary>
public ConcurrentQueue<string> messageQueue = new ConcurrentQueue<string>();
/// <summary>
/// 第一层箱子
/// </summary>
public List<GameObject> firstbox = new List<GameObject>();
/// <summary>
/// 第二层箱子
/// </summary>
public List<GameObject> secondbox = new List<GameObject>();
/// <summary>
/// 小车位移的速度
/// </summary>
public float speed = 5f;
[Obsolete]
private void Awake()
{
//启动MQTT连接
Application.ExternalCall("OpenHtmlMQTT");
ProcessQueue().Forget();
}
private void Start()
{
}
/// <summary>
/// 接受MQTT消息
/// </summary>
/// <param name="message"></param>
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<Allequipment>(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<Qcbd>(str.message);
qcbdequipments.Add(qcbd);
break;
case "el":
Elvequipment elvequipment = JsonConvert.DeserializeObject<Elvequipment>(str.message);
elvequipments.Add(elvequipment);
break;
case "dp":
Dpmequipment dpmequipment = JsonConvert.DeserializeObject<Dpmequipment>(str.message);
dpmequipments.Add(dpmequipment);
break;
case "co":
Convoyorequipment convoyorequipment = JsonConvert.DeserializeObject<Convoyorequipment>(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<Carequipment>(str.message);
string carname = str.device;
GameObject cargame = GameObject.Find(carname);
Carpoint(cargame, carequipment);
break;
case "fe":
Feequipment feequipment = JsonConvert.DeserializeObject<Feequipment>(str.message);
feequipments.Add(feequipment);
break;
case "cm":
Cmequipment cmequipment = JsonConvert.DeserializeObject<Cmequipment>(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<Carinformation>();
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<BoxCollider>();
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<BoxCollider>();
cars.enabled = false;
}
}
}
/// <summary>
/// 需要位移的地方
/// </summary>
/// <param name="car">小车</param>
/// <param name="dis">位移到指定位置</param>
/// <param name="speed">位移的速度</param>
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);
}
}