58 lines
2.2 KiB
C#
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);
|
|
} |