Files
Studio/Assets/Scripts/Studio/UI/Elements/UI_APIConnection.cs
2025-07-01 15:56:24 +09:00

121 lines
4.3 KiB
C#

using UnityEngine;
using XRLib.UI;
using TMPro;
using UnityEngine.UI;
using System.Collections.Generic;
using System;
using Studio.Util;
using Studio.Conifg;
using Studio.Auth;
namespace Studio.UI
{
public class UI_APIConnection : UIBase
{
private TMP_InputField InputField_Domain;
private TMP_InputField InputField_Port;
private Button Button_AddURLItem;
private Button Button_TestAPI;
private Button Button_Remove;
private RectTransform URLItemContent;
private RectTransform AddURL;
private UI_InputURLItem prf_InputURLItem;
private List<UI_InputURLItem> inputURLItems = new List<UI_InputURLItem>();
public Action onTestAPI;
public Action<UI_APIConnection> onRemoveAPIConnectionItem;
public Panel_DataRepository panel_DataRepository;
public override void AfterAwake()
{
prf_InputURLItem = Resources.Load<UI_InputURLItem>("Prefabs/UI/PRF_InputURLItem");
Button_AddURLItem.onClick.AddListener(OnClickAddURLItemButton);
Button_TestAPI.onClick.AddListener(OnClickTestAPIButton);
Button_Remove.onClick.AddListener(OnClickRemoveItemButton);
inputURLItems.Clear();
}
private void OnClickAddURLItemButton()
{
var item = Instantiate(prf_InputURLItem, URLItemContent);
item.onRemoveItem += RemoveURLItem;
AddURLItem(item);
AddURL.transform.SetAsLastSibling();
}
private async void OnClickTestAPIButton()
{
onTestAPI?.Invoke();
// API 연결
// ConfigConnected.APIDomain = InputField_Domain.text;
// ConfigConnected.APIPort = int.Parse(InputField_Port.text);
//StudioService.instance.ConnectMQTT();
string loginURL = $"http://{InputField_Domain.text}:{InputField_Port.text}/api/auth/token";
await AuthService.Instance.Login(loginURL, "sdi", "@SdiDT1!");
foreach (UI_InputURLItem item in inputURLItems)
{
string url = $"http://{InputField_Domain.text}:{InputField_Port.text}/api/{item.InputField_URL.text}";
await StudioService.instance.LoadBaseData(url);
//panel_DataRepository = FindAnyObjectByType<Panel_DataRepository>(FindObjectsInactive.Include);
//panel_DataRepository.apiConnected = true;
}
}
private void OnClickRemoveItemButton()
{
onRemoveAPIConnectionItem?.Invoke(this);
}
private void AddURLItem(UI_InputURLItem item)
{
var verticalLayoutGroup = URLItemContent.GetComponent<VerticalLayoutGroup>();
var sizeDelta = rectTransform.sizeDelta;
sizeDelta.y += item.rectTransform.rect.height + verticalLayoutGroup.spacing;
rectTransform.sizeDelta = sizeDelta;
inputURLItems.Add(item);
}
private void RemoveURLItem(UI_InputURLItem item)
{
var verticalLayoutGroup = URLItemContent.GetComponent<VerticalLayoutGroup>();
var sizeDelta = rectTransform.sizeDelta;
sizeDelta.y -= item.rectTransform.rect.height + verticalLayoutGroup.spacing;
rectTransform.sizeDelta = sizeDelta;
inputURLItems.Remove(item);
Destroy(item.gameObject);
}
public APIConnection GetAPIConnection()
{
var apiConnection = new APIConnection();
apiConnection.domain = InputField_Domain.text;
apiConnection.port = InputField_Port.text;
foreach(var item in inputURLItems)
{
var url = item.GetURL();
apiConnection.urls.Add(url);
}
return apiConnection;
}
public void SetAPIConnection(APIConnection apiConnection)
{
InputField_Domain.text = apiConnection.domain;
InputField_Port.text = apiConnection.port;
foreach(var url in apiConnection.urls)
{
var item = Instantiate(prf_InputURLItem, URLItemContent);
item.onRemoveItem += RemoveURLItem;
item.SetURL(url);
AddURLItem(item);
Button_AddURLItem.transform.SetAsLastSibling();
}
}
}
}