Init
This commit is contained in:
1 parent
a73338916a
commit
fbc1cc8d3e
207 files changed
+10327
-2
No files matched your search
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.Infrastructure.EventBus
|
||||
{
|
||||
public class EventBus
|
||||
{
|
||||
private Dictionary<Type, SubscribersList<IGlobalSubscriber>> s_Subscribers
|
||||
= new();
|
||||
|
||||
public void Subscribe(IGlobalSubscriber subscriber)
|
||||
{
|
||||
List<Type> subscriberTypes = EventBusHelper.GetSubscriberTypes(subscriber);
|
||||
foreach (Type t in subscriberTypes)
|
||||
{
|
||||
if (!s_Subscribers.ContainsKey(t))
|
||||
{
|
||||
s_Subscribers[t] = new SubscribersList<IGlobalSubscriber>();
|
||||
}
|
||||
s_Subscribers[t].Add(subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
public void Unsubscribe(IGlobalSubscriber subscriber)
|
||||
{
|
||||
List<Type> subscriberTypes = EventBusHelper.GetSubscriberTypes(subscriber);
|
||||
foreach (Type t in subscriberTypes)
|
||||
{
|
||||
if (s_Subscribers.ContainsKey(t))
|
||||
s_Subscribers[t].Remove(subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
public void RaiseEvent<TSubscriber>(Action<TSubscriber> action)
|
||||
where TSubscriber : class, IGlobalSubscriber
|
||||
{
|
||||
if (!s_Subscribers.ContainsKey(typeof(TSubscriber))) return;
|
||||
|
||||
SubscribersList<IGlobalSubscriber> subscribers = s_Subscribers[typeof(TSubscriber)];
|
||||
|
||||
subscribers.Executing = true;
|
||||
|
||||
InvokeSubscribers(action, subscribers);
|
||||
|
||||
subscribers.Executing = false;
|
||||
subscribers.Cleanup();
|
||||
}
|
||||
|
||||
private void InvokeSubscribers<TSubscriber>(Action<TSubscriber> action, SubscribersList<IGlobalSubscriber> subscribers)
|
||||
where TSubscriber : class, IGlobalSubscriber
|
||||
{
|
||||
for ( int i = 0; i < subscribers.List.Count; i++)
|
||||
{
|
||||
IGlobalSubscriber subscriber = subscribers.List[i];
|
||||
try
|
||||
{
|
||||
action.Invoke(subscriber as TSubscriber);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
UnityEngine.Debug.LogError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user