using System;
using System.Collections.Generic;
using System.Linq;
namespace Umbraco.Core.Events
{
///
/// An IEventDispatcher that immediately raise all events.
///
/// This means that events will be raised during the scope transaction,
/// whatever happens, and the transaction could roll back in the end.
internal class PassThroughEventDispatcher : IEventDispatcher
{
public bool DispatchCancelable(EventHandler eventHandler, object sender, CancellableEventArgs args, string eventName = null)
{
if (eventHandler == null) return args.Cancel;
eventHandler(sender, args);
return args.Cancel;
}
public bool DispatchCancelable(EventHandler eventHandler, object sender, TArgs args, string eventName = null)
where TArgs : CancellableEventArgs
{
if (eventHandler == null) return args.Cancel;
eventHandler(sender, args);
return args.Cancel;
}
public bool DispatchCancelable(TypedEventHandler eventHandler, TSender sender, TArgs args, string eventName = null)
where TArgs : CancellableEventArgs
{
if (eventHandler == null) return args.Cancel;
eventHandler(sender, args);
return args.Cancel;
}
public void Dispatch(EventHandler eventHandler, object sender, EventArgs args, string eventName = null)
{
eventHandler?.Invoke(sender, args);
}
public void Dispatch(EventHandler eventHandler, object sender, TArgs args, string eventName = null)
{
eventHandler?.Invoke(sender, args);
}
public void Dispatch(TypedEventHandler eventHandler, TSender sender, TArgs args, string eventName = null)
{
eventHandler?.Invoke(sender, args);
}
public IEnumerable GetEvents(EventDefinitionFilter filter)
{
return Enumerable.Empty();
}
public void ScopeExit(bool completed)
{ }
}
}