using System; using Artemis.Core.DataModelExpansions; namespace Artemis.Core { /// /// Represents a data model event with event arguments of type /// public class DataModelEvent : IDataModelEvent where T : DataModelEventArgs { /// /// Trigger the event with the given /// /// The event argument to pass to the event public void Trigger(T eventArgs) { if (eventArgs == null) throw new ArgumentNullException(nameof(eventArgs)); eventArgs.TriggerTime = DateTime.Now; LastEventArguments = eventArgs; LastTrigger = DateTime.Now; TriggerCount++; OnEventTriggered(); } internal virtual void OnEventTriggered() { EventTriggered?.Invoke(this, EventArgs.Empty); } /// public DateTime LastTrigger { get; private set; } /// public int TriggerCount { get; private set; } /// /// Gets the event arguments of the last time the event was triggered /// public T? LastEventArguments { get; private set; } /// [DataModelIgnore] public Type ArgumentsType => typeof(T); /// public event EventHandler? EventTriggered; } /// /// Represents a data model event without event arguments /// public class DataModelEvent : IDataModelEvent { /// /// Trigger the event /// public void Trigger() { DataModelEventArgs eventArgs = new DataModelEventArgs {TriggerTime = DateTime.Now}; LastEventArguments = eventArgs; LastTrigger = DateTime.Now; TriggerCount++; OnEventTriggered(); } internal virtual void OnEventTriggered() { EventTriggered?.Invoke(this, EventArgs.Empty); } /// public DateTime LastTrigger { get; private set; } /// public int TriggerCount { get; private set; } /// /// Gets the event arguments of the last time the event was triggered /// public DataModelEventArgs? LastEventArguments { get; private set; } /// [DataModelIgnore] public Type ArgumentsType => typeof(DataModelEventArgs); /// public event EventHandler? EventTriggered; } }