Files
XRLib/Assets/Scripts/UVC/Event/UniTaskEventHandler.cs
2025-07-24 18:28:09 +09:00

58 lines
2.2 KiB
C#

using Cysharp.Threading.Tasks;
namespace UVC.Event
{
/// <summary>
/// 비동기 이벤트 처리를 위한 델리게이트입니다.
/// UniTask를 반환하는 이벤트 핸들러를 정의하여, 비동기 작업을 이벤트 기반으로 처리할 수 있게 합니다.
/// </summary>
/// <typeparam name="TEventArgs">이벤트 데이터를 담는 제네릭 타입 매개변수</typeparam>
/// <param name="sender">이벤트를 발생시킨 객체</param>
/// <param name="e">이벤트에 포함된 데이터</param>
/// <returns>비동기 작업을 나타내는 UniTask</returns>
/// <example>
/// <code>
/// // 이벤트 정의 예시
/// public class NetworkManager
/// {
/// // UniTaskEventHandler 타입의 이벤트 선언
/// public event UniTaskEventHandler<DataReceivedEventArgs> OnDataReceived;
///
/// // 이벤트 발생 메서드
/// public async UniTask RaiseDataReceivedEvent(DataReceivedEventArgs args)
/// {
/// if (OnDataReceived != null)
/// {
/// // 모든 등록된 핸들러를 비동기적으로 실행
/// foreach (var handler in OnDataReceived.GetInvocationList())
/// {
/// await ((UniTaskEventHandler<DataReceivedEventArgs>)handler).Invoke(this, args);
/// }
/// }
/// }
/// }
///
/// // 이벤트 구독 예시
/// public class DataProcessor
/// {
/// public void Initialize(NetworkManager networkManager)
/// {
/// networkManager.OnDataReceived += HandleDataReceived;
/// }
///
/// private async UniTask HandleDataReceived(object sender, DataReceivedEventArgs e)
/// {
/// // 비동기 이벤트 처리 로직
/// await ProcessDataAsync(e.Data);
/// }
///
/// private async UniTask ProcessDataAsync(byte[] buffers)
/// {
/// await UniTask.Delay(100); // 예시 비동기 작업
/// // 데이터 처리 로직
/// }
/// }
/// </code>
/// </example>
public delegate UniTask UniTaskEventHandler<TEventArgs>(object sender, TEventArgs e);
}