Files
EnglewoodLAB/Assets/Sample/Data/DataSampleRunner.cs

108 lines
3.3 KiB
C#
Raw Permalink Normal View History

#nullable enable
using Cysharp.Threading.Tasks;
using System;
using System.Threading;
using UnityEngine;
namespace UVC.Sample.Data
{
/// <summary>
/// Data 모듈 샘플 실행기입니다.
/// Inspector의 각 토글을 체크하고 [샘플 실행] 버튼을 클릭하거나 Play 시 자동 실행합니다.
/// Console 창에서 [OK] / [FAIL] 로그로 결과를 확인하세요.
/// </summary>
public class DataSampleRunner : MonoBehaviour
{
[Header("실행할 샘플 선택")]
[SerializeField] private bool _runDataArray = true;
[SerializeField] private bool _runDataObject = true;
[SerializeField] private bool _runDataMapper = true;
[SerializeField] private bool _runHttpDataFetcher = true;
[SerializeField] private bool _runMqttDataReceiver = false;
[Header("Play 시 자동 실행")]
[SerializeField] private bool _autoRunOnPlay = false;
private CancellationTokenSource? _cts;
private void Start()
{
if (_autoRunOnPlay)
RunSamplesAsync().Forget(ex => Debug.LogError(ex));
}
private void OnDestroy()
{
_cts?.Cancel();
_cts?.Dispose();
}
/// <summary>
/// 선택된 샘플을 순서대로 실행합니다.
/// Inspector Context Menu 또는 코드에서 호출하세요.
/// </summary>
[ContextMenu("샘플 실행")]
public void RunSamples()
{
RunSamplesAsync().Forget(ex => Debug.LogError(ex));
}
private async UniTask RunSamplesAsync()
{
_cts?.Cancel();
_cts?.Dispose();
_cts = new CancellationTokenSource();
var ct = _cts.Token;
Debug.Log("========== Data 샘플 실행 시작 ==========");
try
{
if (_runDataArray)
{
await UniTask.SwitchToMainThread(ct);
new DataArrayTests().RunAll();
}
if (_runDataObject)
{
await UniTask.SwitchToMainThread(ct);
new DataObjectTests().RunAll();
}
if (_runDataMapper)
{
await UniTask.SwitchToMainThread(ct);
new DataMapperTests().RunAll();
}
if (_runHttpDataFetcher)
{
await UniTask.SwitchToMainThread(ct);
var httpTests = new HttpDataFetcherTests();
await httpTests.RunAll();
}
if (_runMqttDataReceiver)
{
await UniTask.SwitchToMainThread(ct);
var mqttTests = new MqttDataReceiverTests();
await mqttTests.RunAll();
mqttTests.TearDown();
}
}
catch (OperationCanceledException)
{
Debug.Log("샘플 실행이 취소되었습니다.");
}
catch (Exception ex)
{
Debug.LogError($"샘플 실행 중 오류 발생: {ex.Message}");
}
Debug.Log("========== Data 샘플 실행 완료 ==========");
}
}
}