Files
Studio/Assets/NewStudioJYM/Scripts/Panel_MQTTConnectModal.cs
2025-05-14 17:00:44 +09:00

131 lines
3.8 KiB
C#

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
namespace XED
{
public class Panel_MQTTConnectModal : PanelBase
{
private TextMeshProUGUI Text_Domain;
private TextMeshProUGUI Text_Port;
private RectTransform TopicContent;
private Button Button_AddTopic;
private Button Button_Save;
private UI_DataBindingItem prf_mqttTopicItem;
private List<UI_DataBindingItem> topicItems = new List<UI_DataBindingItem>();
private UI_DataBindingItem selectedTopicItem;
public MQTTData loadMQTTData;
public Action<string> onClickFilterButton;
public Action<SaveMQTTData> onSaveMQTTData;
private void TestDataConnected()
{
var mqttJson = Resources.Load<TextAsset>("MQTTData").text;
loadMQTTData = JsonConvert.DeserializeObject<MQTTData>(mqttJson);
}
public override void AfterAwake()
{
TestDataConnected();
prf_mqttTopicItem = Resources.Load<UI_DataBindingItem>("Prefabs/UI/PRF_DataBindingItemItem");
SetURLText();
Button_AddTopic.onClick.AddListener(AddTopicItem);
Button_Save.onClick.AddListener(Save);
}
//app_config
/// <summary>
/// 설정한 데이터값 가져와 적용
/// </summary>
private void ConnectedData()
{
//string path = Path.Combine(Application.streamingAssetsPath, "app_config.json");
//string json = System.IO.File.ReadAllText(path);
//loadMQTTData = JsonUtility.FromJson<MQTTData>(json);
SetURLText();
}
/// <summary>
/// 도메인 PORT 설정
/// </summary>
private void SetURLText()
{
Text_Domain.SetText(loadMQTTData.domain);
Text_Port.SetText(loadMQTTData.port);
}
private void OnClickFilterButton(UI_DataBindingItem item)
{
selectedTopicItem = item;
var itemName = item.GetTopicName();
onClickFilterButton?.Invoke(itemName);
}
/// <summary>
/// 토픽 아이템 추가
/// </summary>
private void AddTopicItem()
{
var item = Instantiate(prf_mqttTopicItem, TopicContent);
item.onRemove += RemoveTopicItem;
item.onFilter += OnClickFilterButton;
topicItems.Add(item);
}
/// <summary>
/// TopicItem 제거
/// </summary>
/// <param name="item"></param>
private void RemoveTopicItem(UI_DataBindingItem item)
{
topicItems.Remove(item);
Destroy(item.gameObject);
}
/// <summary>
/// MQTT 데이터 추가
/// </summary>
private void Save()
{
var saveData = GetMQTTData();
onSaveMQTTData?.Invoke(saveData);
}
/// <summary>
///
/// </summary>
/// <param name="filterData"></param>
public void SetFilterData(SaveFilterData filterData)
{
if (selectedTopicItem == null)
return;
selectedTopicItem.SetFilterData(filterData);
selectedTopicItem.SetChangedInputFieldTopicName();
}
/// <summary>
/// MQTTData 가져오기
/// </summary>
/// <returns></returns>
private SaveMQTTData GetMQTTData()
{
SaveMQTTData saveMQTTData = new SaveMQTTData();
saveMQTTData.domain = Text_Domain.text;
saveMQTTData.port = Text_Port.text;
foreach (var topicItem in topicItems)
{
saveMQTTData.saveFilterData.Add(topicItem.GetFilterData());
}
return saveMQTTData;
}
}
}