refactoring
This commit is contained in:
116
Assets/Scripts/Simulator/Components/ComponentMqttHandler.cs
Normal file
116
Assets/Scripts/Simulator/Components/ComponentMqttHandler.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using Simulator.Config;
|
||||
using Simulator.Data.Transport;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UVC.Data;
|
||||
using UVC.Data.Core;
|
||||
using UVC.Data.Mqtt;
|
||||
|
||||
namespace Simulator.Data
|
||||
{
|
||||
public class ComponentMqttHandler
|
||||
{
|
||||
private readonly ComponentPoolManager _poolManager;
|
||||
|
||||
public ComponentMqttHandler(ComponentPoolManager poolManager)
|
||||
{
|
||||
_poolManager = poolManager;
|
||||
}
|
||||
|
||||
public void SubscribeTopic(Dictionary<string, ComponentBase> componentDatas)
|
||||
{
|
||||
foreach (var componentdata in componentDatas)
|
||||
{
|
||||
DataRepository.Instance.MqttReceiver.AddTopic($"simulation/{SimulationConfig.SimulationCode}/components/+/{componentdata.Key}/#");
|
||||
var mqttConfig = new MqttSubscriptionConfig($"simulation/{SimulationConfig.SimulationCode}/components/+/{componentdata.Key}/#", false);
|
||||
mqttConfig.SetDataMapper(_poolManager.DataMappers[componentdata.Value.componentType]);
|
||||
mqttConfig.SetHandler((value) => OnUpdateData(value, componentdata.Value.componentType));
|
||||
DataRepository.Instance.MqttReceiver.Add(mqttConfig);
|
||||
}
|
||||
|
||||
DataRepository.Instance.MqttReceiver.AddTopic($"simulation/{SimulationConfig.SimulationCode}/status_changed");
|
||||
var config = new MqttSubscriptionConfig($"simulation/{SimulationConfig.SimulationCode}/status_changed", false);
|
||||
var progressDataMask = new DataMask();
|
||||
DataMapper progressmapper = new DataMapper(progressDataMask);
|
||||
config.SetDataMapper(progressmapper);
|
||||
config.SetHandler(PlayerPropertyDataBase.Instance.GetMqttData);
|
||||
DataRepository.Instance.MqttReceiver.Add(config);
|
||||
}
|
||||
|
||||
public void OnUpdateData(IDataObject data, ComponentType type)
|
||||
{
|
||||
if (data == null) return;
|
||||
|
||||
DataObject obj = data as DataObject;
|
||||
if (obj == null) return;
|
||||
|
||||
string componentId = obj.GetString("component_id");
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ComponentType.Source:
|
||||
if (string.Equals(obj.GetString("event_name"), "completed"))
|
||||
{
|
||||
_poolManager.FindActiveItem(type, componentId)?.GetModelData(obj);
|
||||
}
|
||||
break;
|
||||
case ComponentType.Sink:
|
||||
if (string.Equals(obj.GetString("event_name"), "completed"))
|
||||
{
|
||||
_poolManager.FindActiveItem(type, componentId)?.GetModelData(obj);
|
||||
}
|
||||
break;
|
||||
case ComponentType.Queue:
|
||||
if (string.Equals(obj.GetString("event_name"), "completed"))
|
||||
{
|
||||
_poolManager.FindActiveItem(type, componentId)?.GetModelData(obj);
|
||||
}
|
||||
break;
|
||||
case ComponentType.Rack:
|
||||
var rack = _poolManager.FindActiveItem(type, componentId) as RackComponent;
|
||||
if (string.Equals(obj.GetString("event_name"), "entity_stored"))
|
||||
{
|
||||
rack?.GetModelData(obj);
|
||||
}
|
||||
if (string.Equals(obj.GetString("event_name"), "inventory_initialized"))
|
||||
{
|
||||
rack?.InitializeQueue(obj);
|
||||
}
|
||||
break;
|
||||
case ComponentType.ASRS:
|
||||
case ComponentType.RobotArm:
|
||||
case ComponentType.Processor:
|
||||
case ComponentType.Worker:
|
||||
_poolManager.FindActiveItem(type, componentId)?.GetModelData(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetMQTT(SimulatorCodeDataClass sdata, LogicDetailData logicDetailData)
|
||||
{
|
||||
if (logicDetailData.transport_system != null)
|
||||
{
|
||||
if (logicDetailData.transport_system.transport_managers != null && logicDetailData.transport_system.transport_managers.Count >= 1)
|
||||
{
|
||||
foreach (var transport_manager in logicDetailData.transport_system.transport_managers)
|
||||
{
|
||||
if (transport_manager.vehicle_fleets != null && transport_manager.vehicle_fleets.Count >= 1)
|
||||
{
|
||||
foreach (var vehicle_fleet in transport_manager.vehicle_fleets)
|
||||
{
|
||||
AGVManager.Instance.InitAGV(vehicle_fleet.vehicles);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (logicDetailData.production_system.conveyors != null && logicDetailData.production_system.conveyors.Count >= 1)
|
||||
{
|
||||
foreach (var conveyor in logicDetailData.production_system.conveyors)
|
||||
{
|
||||
ConveyorManager.Instance.SubscribeConveyor(conveyor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user