|
@@ -28,7 +28,7 @@ public class EventData<T, TDataModel> : IEventData
|
|
|
/// <summary>
|
|
|
/// A list of triggers for this event. If any of the triggers match, the event runs.
|
|
|
/// </summary>
|
|
|
- public List<ITrigger<T, TDataModel>> Triggers { get; set; }
|
|
|
+ public List<IEventTrigger<T, TDataModel>> Triggers { get; set; }
|
|
|
|
|
|
public List<IEventAction<T>> Actions { get; set; }
|
|
|
|
|
@@ -37,7 +37,7 @@ public class EventData<T, TDataModel> : IEventData
|
|
|
public EventData(T eventData)
|
|
|
{
|
|
|
Event = eventData;
|
|
|
- Triggers = new List<ITrigger<T, TDataModel>>();
|
|
|
+ Triggers = new List<IEventTrigger<T, TDataModel>>();
|
|
|
Actions = new List<IEventAction<T>>();
|
|
|
}
|
|
|
|
|
@@ -64,7 +64,7 @@ public class EventData<T, TDataModel> : IEventData
|
|
|
var nTriggers = reader.ReadInt32();
|
|
|
for(int i = 0; i < nTriggers; ++i)
|
|
|
{
|
|
|
- var trigger = EventUtils.DeserializeObject<ITrigger<T, TDataModel>>(EventUtils.GetTriggerType, reader);
|
|
|
+ var trigger = EventUtils.DeserializeObject<IEventTrigger<T, TDataModel>>(EventUtils.GetTriggerType, reader);
|
|
|
Triggers.Add(trigger);
|
|
|
}
|
|
|
var nActions = reader.ReadInt32();
|
|
@@ -159,10 +159,12 @@ public static class EventUtils
|
|
|
private static Dictionary<string, Type>? _triggerTypes;
|
|
|
private static Dictionary<string, Type>? _actionTypes;
|
|
|
|
|
|
- [MemberNotNullWhen(true, nameof(_eventTypes), nameof(_triggerTypes), nameof(_actionTypes))]
|
|
|
+ private static Dictionary<Type, List<Type>>? _eventTriggerTypes;
|
|
|
+
|
|
|
+ [MemberNotNullWhen(true, nameof(_eventTypes), nameof(_triggerTypes), nameof(_actionTypes), nameof(_eventTriggerTypes))]
|
|
|
private static bool _loadedTypes { get; set; }
|
|
|
|
|
|
- [MemberNotNull(nameof(_eventTypes), nameof(_triggerTypes), nameof(_actionTypes))]
|
|
|
+ [MemberNotNull(nameof(_eventTypes), nameof(_triggerTypes), nameof(_actionTypes), nameof(_eventTriggerTypes))]
|
|
|
private static void LoadTypes()
|
|
|
{
|
|
|
if (_loadedTypes) return;
|
|
@@ -171,6 +173,7 @@ public static class EventUtils
|
|
|
_eventTypes = new();
|
|
|
_triggerTypes = new();
|
|
|
_actionTypes = new();
|
|
|
+ _eventTriggerTypes = new();
|
|
|
foreach(var type in CoreUtils.TypeList(x => true))
|
|
|
{
|
|
|
if (type.HasInterface(typeof(IEvent<>)))
|
|
@@ -180,11 +183,15 @@ public static class EventUtils
|
|
|
_eventTypes[type.Name] = type;
|
|
|
}
|
|
|
}
|
|
|
- else if (type.HasInterface(typeof(ITrigger<,>)))
|
|
|
+ else if (type.GetInterfaceDefinition(typeof(IEventTrigger<,>)) is Type eventInterface)
|
|
|
{
|
|
|
if (type.GetConstructor([]) is not null)
|
|
|
{
|
|
|
_triggerTypes[type.Name] = type;
|
|
|
+
|
|
|
+ var eventType = eventInterface.GenericTypeArguments[0];
|
|
|
+ eventType = eventType.IsGenericType ? eventType.GetGenericTypeDefinition() : eventType;
|
|
|
+ _eventTriggerTypes.GetValueOrAdd(eventType).Add(type);
|
|
|
}
|
|
|
}
|
|
|
else if (type.HasInterface(typeof(IEventAction<>)))
|
|
@@ -197,6 +204,13 @@ public static class EventUtils
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static IEnumerable<Type> GetEventTriggerTypes(Type eventType)
|
|
|
+ {
|
|
|
+ LoadTypes();
|
|
|
+ eventType = eventType.IsGenericType ? eventType.GetGenericTypeDefinition() : eventType;
|
|
|
+ return _eventTriggerTypes.GetValueOrDefault(eventType) ?? Enumerable.Empty<Type>();
|
|
|
+ }
|
|
|
+
|
|
|
public static Type GetEventType(string type)
|
|
|
{
|
|
|
LoadTypes();
|
|
@@ -448,7 +462,12 @@ public interface IEvent<TDataModel> : IEvent
|
|
|
Notification GenerateNotification(TDataModel model);
|
|
|
}
|
|
|
|
|
|
-public interface ITrigger<TEvent, TDataModel> : ISerializeBinary
|
|
|
+public interface IEventTrigger
|
|
|
+{
|
|
|
+ string GetDescription();
|
|
|
+}
|
|
|
+
|
|
|
+public interface IEventTrigger<TEvent, TDataModel> : ISerializeBinary, IEventTrigger
|
|
|
where TEvent : IEvent<TDataModel>
|
|
|
where TDataModel : IEventDataModel
|
|
|
{
|