64 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |