Files
XRLib/Assets/Scripts/Factory/FactoryAppMain.cs
2025-12-11 21:05:44 +09:00

110 lines
4.0 KiB
C#

using Cysharp.Threading.Tasks;
using Factory.Config;
using System;
using UnityEngine;
using UVC.Core;
using UVC.Data;
using UVC.Data.Mqtt;
using UVC.Locale;
using UVC.Util;
namespace Factory
{
[DefaultExecutionOrder(100)]
public class FactoryAppMain : SingletonApp<FactoryAppMain>
{
public Action Initialized;
/// <summary>
/// 초기 화 메서드입니다.
/// Awake 메서드에서 호출되며, MonoBehaviour가 생성될 때 한 번만 실행됩니다.
/// </summary>
protected override async void Init()
{
// 플레이 모드가 아닐 경우, 초기화 로직을 실행하지 않습니다.
if (!Application.isPlaying) return;
#if !UNITY_WEBGL || UNITY_EDITOR
//로깅 설정
UVC.Log.Log4netCodeConfigurator.Setup();
#endif
await SettupConfigAsync();
SetNetworkConfig();
if (Initialized != null)
{
Initialized.Invoke();
}
}
void Start()
{
//Tester.RunAllTests();
}
private async UniTask SettupConfigAsync()
{
if (FactoryAppConfig.LoadConfig())
{
Application.targetFrameRate = FactoryAppConfig.Config.TargetFrameRate;
//기본 언어 설정
bool success = LocalizationManager.Instance.LoadDefaultLocalizationData(FactoryAppConfig.Config.Language, "FactoryLocale.json");
Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer)
{
//창 설정
if (FactoryAppConfig.Config.Window != null)
{
WindowTools.Instance.Init(FactoryAppConfig.Config.Window);
}
}
FactoryConstants.API_DOMAIN = FactoryAppConfig.Config.Api;
FactoryConstants.MQTT_DOMAIN = FactoryAppConfig.Config.Mqtt.Domain;
FactoryConstants.MQTT_PORT = FactoryAppConfig.Config.Mqtt.Port;
FactoryConstants.MQTT_DATA_KEY = FactoryAppConfig.Config.Mqtt.DataKey;
FactoryConstants.MQTT_MESSAGEPACK_ENABLED = FactoryAppConfig.Config.Mqtt.MessagePack;
}
//사용자 DataMask 설정 AppData에서 로드
await UserSetting.LoadFromAppData();
}
private void SetNetworkConfig()
{
URLList.Add("baseinfo", $"{FactoryConstants.API_DOMAIN}/baseinfo");
URLList.Add("playbackList", $"{FactoryConstants.API_DOMAIN}/playback/list");
URLList.Add("playbackFile", $"{FactoryConstants.API_DOMAIN}/playback");
bool useWebSocket = false;
//test WebGL 설정
#if UNITY_WEBGL && !UNITY_EDITOR
Constants.MQTT_PORT = 8083;
useWebSocket = true;
#endif
//DataRepository.Instance.MqttReceiver.SetDomainPort("mqtt-input.flexing.ai", 3000);//VTM 외부망
//DataRepository.Instance.MqttReceiver.SetDomainPort("localhost", 1883);
DataRepository.Instance.MqttReceiver.SetDataPicker(new MqttDataPicker(FactoryConstants.MQTT_DATA_KEY, FactoryConstants.MQTT_MESSAGEPACK_ENABLED));
DataRepository.Instance.MqttReceiver.SetDomainPort(FactoryConstants.MQTT_DOMAIN, FactoryConstants.MQTT_PORT);
DataRepository.Instance.MqttReceiver.SetUseWebSocket(useWebSocket);
DataRepository.Instance.MqttReceiver.AddTopic("AGV");
DataRepository.Instance.MqttReceiver.AddTopic("ALARM");
DataRepository.Instance.MqttReceiver.AddTopic("PORT");
//DataRepository.Instance.MqttReceiver.AddTopic("AGV_RECIPE");
//10초 후 정지
//UniTask.Delay(TimeSpan.FromSeconds(10)).ContinueWith(() =>
//{
// DataRepository.Instance.MqttReceiver.Exit();
//});
}
}
}