108 lines
3.3 KiB
C#
108 lines
3.3 KiB
C#
|
|
#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 샘플 실행 완료 ==========");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|