using Cysharp.Threading.Tasks; namespace UVC.Event { /// /// 비동기 이벤트 처리를 위한 델리게이트입니다. /// UniTask를 반환하는 이벤트 핸들러를 정의하여, 비동기 작업을 이벤트 기반으로 처리할 수 있게 합니다. /// /// 이벤트 데이터를 담는 제네릭 타입 매개변수 /// 이벤트를 발생시킨 객체 /// 이벤트에 포함된 데이터 /// 비동기 작업을 나타내는 UniTask /// /// /// // 이벤트 정의 예시 /// public class NetworkManager /// { /// // UniTaskEventHandler 타입의 이벤트 선언 /// public event UniTaskEventHandler OnDataReceived; /// /// // 이벤트 발생 메서드 /// public async UniTask RaiseDataReceivedEvent(DataReceivedEventArgs args) /// { /// if (OnDataReceived != null) /// { /// // 모든 등록된 핸들러를 비동기적으로 실행 /// foreach (var handler in OnDataReceived.GetInvocationList()) /// { /// await ((UniTaskEventHandler)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); // 예시 비동기 작업 /// // 데이터 처리 로직 /// } /// } /// /// public delegate UniTask UniTaskEventHandler(object sender, TEventArgs e); }