using System; namespace Robust.Shared.GameObjects { public static class EventBusExt { public static void SubscribeSessionEvent( this IEventBus eventBus, EventSource source, IEntityEventSubscriber subscriber, EntitySessionEventHandler handler) { var wrapper = new HandlerWrapper(handler); eventBus.SubscribeEvent>(source, subscriber, wrapper.Invoke); } public static void SubscribeSessionEvent( this IEventBus eventBus, EventSource source, IEntityEventSubscriber subscriber, EntitySessionEventHandler handler, Type orderType, Type[]? before=null, Type[]? after=null) { var wrapper = new HandlerWrapper(handler); eventBus.SubscribeEvent>( source, subscriber, wrapper.Invoke, orderType, before, after); } private sealed class HandlerWrapper { public HandlerWrapper(EntitySessionEventHandler handler) { Handler = handler; } public EntitySessionEventHandler Handler { get; } public void Invoke(EntitySessionMessage msg) { Handler(msg.Message, msg.EventArgs); } private bool Equals(HandlerWrapper other) { return Handler.Equals(other.Handler); } public override bool Equals(object? obj) { return ReferenceEquals(this, obj) || obj is HandlerWrapper other && Equals(other); } public override int GetHashCode() { return Handler.GetHashCode(); } } } }