Files
AIExpo/Assets/Scripts/KCA/Controller/ControllerManager.cs
geondo55 1a79c9ffe3 최종
2025-09-18 10:58:34 +09:00

64 lines
2.2 KiB
C#

#nullable enable
using KCA;
using System;
using UnityEngine;
using UVC.Core;
using UVC.Data;
using UVC.Data.Core;
using UVC.Data.Mqtt;
namespace KCA.Controller
{
public class ControllerManager : SingletonScene<ControllerManager>
{
public event Action<string, string> onUpdateData;
protected override void Init()
{
SceneMain.Instance.Initialized += OnSceneInitialized;
}
private void OnSceneInitialized()
{
var controllerDataMask = new DataMask();
controllerDataMask.ObjectName = "Controller"; // 객체의 이름을 설정합니다.
controllerDataMask.ObjectIdKey = "name"; //고유 식별자로 사용할 키를 설정합니다.
controllerDataMask["name"] = "";
controllerDataMask["value"] = "";
var mqttConfig = new MqttSubscriptionConfig("controller/status", true);
mqttConfig.setDataMapper(new DataMapper(controllerDataMask));
// 생성한 파이프라인 정보를 전역 MQTT 파이프라인에 추가합니다.
DataRepository.Instance.MqttReceiver.Add(mqttConfig);
DataRepository.Instance.AddDataUpdateHandler("controller/status", OnUpdateData);
}
public void OnUpdateData(IDataObject data)
{
if (data == null) return;
DataArray? arr = data as DataArray;
if (arr == null || arr.Count == 0) return;
// 데이터 배열에서 추가, 제거, 수정된 항목 리스트를 가져옵니다.
var AddedItems = arr.AddedItems;
var RemovedItems = arr.RemovedItems;
var ModifiedList = arr.ModifiedList;
//Debug.Log($"received data: count:{arr.Count}, Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
foreach (var item in ModifiedList)
{
string? name = item.GetString("name");
string? value = item.GetString("value");
if(name != null && value != null)
{
onUpdateData?.Invoke(name, value);
}
}
}
}
}