#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 { public event Action 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); } } } } }