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[] data)
/// {
/// await UniTask.Delay(100); // ¿¹½Ã ºñµ¿±â ÀÛ¾÷
/// // µ¥ÀÌÅÍ Ã³¸® ·ÎÁ÷
/// }
/// }
///
///
public delegate UniTask UniTaskEventHandler(object sender, TEventArgs e);
}