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); } 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(); } } } }