This commit is contained in:
jmaniuvc
2025-05-23 20:36:02 +09:00
parent e33a795d2d
commit b5bcfb4ca9
6 changed files with 49 additions and 20 deletions

View File

@@ -4,6 +4,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
using Studio;
using Studio.Core;
namespace Studio namespace Studio
{ {
@@ -19,16 +21,21 @@ namespace Studio
} }
} }
public class StudioService public class StudioService : UnitySingleton<StudioService>
{ {
#region Singleton #region Singleton
private static readonly StudioService instance = new StudioService(new StudioRepoistory());
public static StudioService Instance => instance;
static StudioService() { }
#endregion #endregion
private Dictionary<string, Dictionary<string, EventHandler<StudioServiceTypeEventArgs>>> listenerIdMap; private Dictionary<string, Dictionary<string, EventHandler<StudioServiceTypeEventArgs>>> listenerIdMap;
private StudioRepoistory repository; private StudioRepoistory repository;
public bool isConnected
{
get
{
return repository.isConnected;
}
}
private Dictionary<string, float> updateTime = new(); private Dictionary<string, float> updateTime = new();
private int totalRequestPacket; private int totalRequestPacket;
private int totalResponsePacket; private int totalResponsePacket;
@@ -43,11 +50,14 @@ namespace Studio
public Dictionary<string, StudioEntityWithState<object>> apiData = new(); public Dictionary<string, StudioEntityWithState<object>> apiData = new();
public Dictionary<string, (Dictionary<string, Dictionary<string, string>>, TimeSpan)> mqttData = new(); public Dictionary<string, (Dictionary<string, Dictionary<string, string>>, TimeSpan)> mqttData = new();
private Dictionary<string, DateTime> lastUpdateTime = new(); private Dictionary<string, DateTime> lastUpdateTime = new();
public event Action<string, StudioEntityWithState<object>> onAPIDataLoaded; public event Action<string, StudioEntityWithState<object>> onAPIDataLoaded;
public event Action<string, Dictionary<string, Dictionary<string, string>>, TimeSpan> onMQTTDataLoaded; public event Action<string, Dictionary<string, Dictionary<string, string>>, TimeSpan> onMQTTDataLoaded;
bool isMQTTConnected;
//private string //private string
private StudioService(StudioRepoistory repository) private StudioService(StudioRepoistory repository)
{ {
@@ -59,7 +69,15 @@ namespace Studio
} }
public void ConnectMQTT() public void ConnectMQTT()
{ {
if (isMQTTConnected)
return;
this.repository = new StudioRepoistory();
listenerIdMap = new Dictionary<string, Dictionary<string, EventHandler<StudioServiceTypeEventArgs>>>();
repository.OnTopicList += OnTopicList;
repository.MQTTConnect(); repository.MQTTConnect();
isMQTTConnected = true;
} }
public void SubscribeMQTT(string topic) public void SubscribeMQTT(string topic)
@@ -90,6 +108,15 @@ namespace Studio
UpdateTopicData(type, idKey.Key, idKey.Value); UpdateTopicData(type, idKey.Key, idKey.Value);
} }
if (!mqttData.ContainsKey(type))
{
mqttData.Add(type, (entities, elapsedTime));
}
else
{
mqttData[type] = (entities, elapsedTime);
}
onMQTTDataLoaded?.Invoke(type, entities, elapsedTime); // 나중에 클래스 밖으로 이동 필요 onMQTTDataLoaded?.Invoke(type, entities, elapsedTime); // 나중에 클래스 밖으로 이동 필요
} }

View File

@@ -59,10 +59,10 @@ namespace Studio
foreach (UI_InputURLItem item in inputURLItems) foreach (UI_InputURLItem item in inputURLItems)
{ {
string url = "/api/" + item.InputField_URL.text; string url = "/api/" + item.InputField_URL.text;
await StudioService.Instance.LoadBaseData(url); await StudioService.instance.LoadBaseData(url);
panel_DataRepository = FindAnyObjectByType<Panel_DataRepository>(FindObjectsInactive.Include); //panel_DataRepository = FindAnyObjectByType<Panel_DataRepository>(FindObjectsInactive.Include);
panel_DataRepository.apiConnected = true; //panel_DataRepository.apiConnected = true;
} }
} }
private void OnClickRemoveItemButton() private void OnClickRemoveItemButton()

View File

@@ -55,10 +55,10 @@ namespace Studio
foreach (UI_InputTopicItem item in inputTopicItems) foreach (UI_InputTopicItem item in inputTopicItems)
{ {
StudioService.Instance.SubscribeMQTT(item.InputField_Topic.text); StudioService.instance.SubscribeMQTT(item.InputField_Topic.text);
panel_DataRepository = FindAnyObjectByType<Panel_DataRepository>(FindObjectsInactive.Include); //panel_DataRepository = FindAnyObjectByType<Panel_DataRepository>(FindObjectsInactive.Include);
panel_DataRepository.mqttConnected = true; //panel_DataRepository.mqttConnected = true;
} }
} }
private void OnClickRemoveItemButton() private void OnClickRemoveItemButton()

View File

@@ -42,8 +42,8 @@ namespace Studio
Dictionary<string, UI_BaseDataButton> apiButtons = new(); Dictionary<string, UI_BaseDataButton> apiButtons = new();
Dictionary<string, UI_MQTTDataButton> mqttButtons = new(); Dictionary<string, UI_MQTTDataButton> mqttButtons = new();
public bool apiConnected; //public bool apiConnected;
public bool mqttConnected; //public bool mqttConnected;
public override void AfterAwake() public override void AfterAwake()
{ {
@@ -65,11 +65,12 @@ namespace Studio
{ {
gameObject.transform.SetAsLastSibling(); gameObject.transform.SetAsLastSibling();
StudioService studioService = StudioService.Instance; StudioService studioService = StudioService.instance;
studioService.onAPIDataLoaded += UpdateAPIDataButton; studioService.onAPIDataLoaded += UpdateAPIDataButton;
studioService.onMQTTDataLoaded += UpdateMQTTDataButton; studioService.onMQTTDataLoaded += UpdateMQTTDataButton;
/*
foreach (string key in studioService.apiData.Keys) foreach (string key in studioService.apiData.Keys)
{ {
UpdateAPIDataButton(key, studioService.apiData[key]); UpdateAPIDataButton(key, studioService.apiData[key]);
@@ -79,6 +80,7 @@ namespace Studio
{ {
UpdateMQTTDataButton(key, studioService.mqttData[key].Item1, studioService.mqttData[key].Item2); UpdateMQTTDataButton(key, studioService.mqttData[key].Item1, studioService.mqttData[key].Item2);
} }
*/
/* /*
if (apiConnected) if (apiConnected)
{ {
@@ -159,7 +161,7 @@ namespace Studio
public void ShowInformation_API() public void ShowInformation_API()
{ {
APITotalBoardEntity info = StudioService.Instance.GetAPIStatusBoarder(); APITotalBoardEntity info = StudioService.instance.GetAPIStatusBoarder();
TotalRequestPacketSize.text = info.TotalRequestPacketSize.ToString(); TotalRequestPacketSize.text = info.TotalRequestPacketSize.ToString();
AverageRequestPacketSize.text = info.AverageRequestPacketSize.ToString(); AverageRequestPacketSize.text = info.AverageRequestPacketSize.ToString();

View File

@@ -16,14 +16,14 @@ namespace Studio
Constants.APIDomain = "220.90.135.190"; Constants.APIDomain = "220.90.135.190";
Constants.APIPort = 23000; Constants.APIPort = 23000;
Constants.MQTTPort = 8088; Constants.MQTTPort = 8088;
StudioService.Instance.ConnectMQTT(); StudioService.instance.ConnectMQTT();
} }
private async void Test() private async void Test()
{ {
await AuthService.Instance.Login("xr", "@dbqlTl1"); await AuthService.Instance.Login("xr", "@dbqlTl1");
await StudioService.Instance.LoadBaseData("/api/agv"); await StudioService.instance.LoadBaseData("/api/agv");
Debug.Log(AuthService.Instance.Entiti.accessToken); Debug.Log(AuthService.Instance.Entiti.accessToken);
} }
private void Update() private void Update()
@@ -34,12 +34,12 @@ namespace Studio
} }
if (Input.GetKeyDown(KeyCode.I)) if (Input.GetKeyDown(KeyCode.I))
{ {
StudioService.Instance.SubscribeMQTT("STOCKER_CRANE"); StudioService.instance.SubscribeMQTT("STOCKER_CRANE");
} }
if(Input.GetKeyDown(KeyCode.U)) if(Input.GetKeyDown(KeyCode.U))
{ {
StudioService.Instance.SubscribeMQTT("AGV"); StudioService.instance.SubscribeMQTT("AGV");
} }
if(Input.GetKeyDown(KeyCode.T)) if(Input.GetKeyDown(KeyCode.T))
{ {

View File

@@ -26,7 +26,7 @@ namespace Studio
private void SetItem() private void SetItem()
{ {
var apiItem = CreateAccordion(); var apiItem = CreateAccordion();
var basedatas = StudioService.Instance.apiData; var basedatas = StudioService.instance.apiData;
foreach(var data in basedatas) foreach(var data in basedatas)
{ {
CreateTabButton(data.Key, apiItem.BarList); CreateTabButton(data.Key, apiItem.BarList);