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 { public Action Initialized; /// /// 초기 화 메서드입니다. /// Awake 메서드에서 호출되며, MonoBehaviour가 생성될 때 한 번만 실행됩니다. /// 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(); //}); } } }