Skip to content

Commit 673ffaf

Browse files
committed
Special case matching handler type without proxy
1 parent 16a7490 commit 673ffaf

2 files changed

Lines changed: 37 additions & 9 deletions

File tree

MonkeyLoader/Events/EventManager.Handlers.cs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,29 +88,45 @@ internal bool UnregisterEventHandler<TEvent>(Mod mod, IEventHandler<TEvent> even
8888
private bool RegisterAsyncEventHandler<TBaseEvent, TEvent>(Mod mod, IAsyncEventHandler<TEvent> asyncEventHandler)
8989
where TBaseEvent : AsyncEvent
9090
where TEvent : TBaseEvent
91-
=> _eventDispatchers.GetOrCreateValue(CreateAsyncDispatcher<TBaseEvent>).AddHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(asyncEventHandler));
91+
=> _eventDispatchers.GetOrCreateValue(CreateAsyncDispatcher<TBaseEvent>)
92+
.AddHandler(mod, typeof(TBaseEvent) == typeof(TEvent)
93+
? (IAsyncEventHandler<TBaseEvent>)asyncEventHandler
94+
: EventHandlerProxy.For<TBaseEvent, TEvent>(asyncEventHandler));
9295

9396
private bool RegisterCancelableAsyncEventHandler<TBaseEvent, TEvent>(Mod mod, ICancelableAsyncEventHandler<TEvent> cancelableAsyncEventHandler)
9497
where TBaseEvent : CancelableAsyncEvent
9598
where TEvent : TBaseEvent
96-
=> _eventDispatchers.GetOrCreateValue(CreateCancelableAsyncDispatcher<TBaseEvent>).AddHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableAsyncEventHandler));
99+
=> _eventDispatchers.GetOrCreateValue(CreateCancelableAsyncDispatcher<TBaseEvent>)
100+
.AddHandler(mod, typeof(TBaseEvent) == typeof(TEvent)
101+
? (ICancelableAsyncEventHandler<TBaseEvent>)cancelableAsyncEventHandler
102+
: EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableAsyncEventHandler));
97103

98104
private bool RegisterCancelableSyncEventHandler<TBaseEvent, TEvent>(Mod mod, ICancelableEventHandler<TEvent> cancelableEventHandler)
99105
where TBaseEvent : CancelableSyncEvent
100106
where TEvent : TBaseEvent
101-
=> _eventDispatchers.GetOrCreateValue(CreateCancelableDispatcher<TBaseEvent>).AddHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableEventHandler));
107+
=> _eventDispatchers.GetOrCreateValue(CreateCancelableDispatcher<TBaseEvent>)
108+
.AddHandler(mod, typeof(TBaseEvent) == typeof(TEvent)
109+
? (ICancelableEventHandler<TBaseEvent>)cancelableEventHandler
110+
: EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableEventHandler));
102111

103112
private bool RegisterSyncEventHandler<TBaseEvent, TEvent>(Mod mod, IEventHandler<TEvent> eventHandler)
104113
where TBaseEvent : SyncEvent
105114
where TEvent : TBaseEvent
106-
=> _eventDispatchers.GetOrCreateValue(CreateDispatcher<TBaseEvent>).AddHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(eventHandler));
115+
=> _eventDispatchers.GetOrCreateValue(CreateDispatcher<TBaseEvent>)
116+
.AddHandler(mod, typeof(TBaseEvent) == typeof(TEvent)
117+
? (IEventHandler<TBaseEvent>)eventHandler
118+
: EventHandlerProxy.For<TBaseEvent, TEvent>(eventHandler));
107119

108120
private bool UnregisterAsyncEventHandler<TBaseEvent, TEvent>(Mod mod, IAsyncEventHandler<TEvent> asyncEventHandler)
109121
where TBaseEvent : AsyncEvent
110122
where TEvent : TBaseEvent
111123
{
124+
var handler = typeof(TBaseEvent) == typeof(TEvent)
125+
? (IAsyncEventHandler<TBaseEvent>)asyncEventHandler
126+
: EventHandlerProxy.For<TBaseEvent, TEvent>(asyncEventHandler);
127+
112128
if (_eventDispatchers.TryGetValue<AsyncEventDispatcher<TEvent>>(out var asyncEventDispatcher))
113-
return asyncEventDispatcher!.RemoveHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(asyncEventHandler));
129+
return asyncEventDispatcher!.RemoveHandler(mod, handler);
114130

115131
return false;
116132
}
@@ -119,8 +135,12 @@ private bool UnregisterCancelableAsyncEventHandler<TBaseEvent, TEvent>(Mod mod,
119135
where TBaseEvent : CancelableAsyncEvent
120136
where TEvent : TBaseEvent
121137
{
138+
var handler = typeof(TBaseEvent) == typeof(TEvent)
139+
? (ICancelableAsyncEventHandler<TBaseEvent>)cancelableAsyncEventHandler
140+
: EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableAsyncEventHandler);
141+
122142
if (_eventDispatchers.TryGetValue<CancelableAsyncEventDispatcher<TEvent>>(out var cancelableAsyncEventDispatcher))
123-
return cancelableAsyncEventDispatcher!.RemoveHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableAsyncEventHandler));
143+
return cancelableAsyncEventDispatcher!.RemoveHandler(mod, handler);
124144

125145
return false;
126146
}
@@ -129,8 +149,12 @@ private bool UnregisterCancelableSyncEventHandler<TBaseEvent, TEvent>(Mod mod, I
129149
where TBaseEvent : CancelableSyncEvent
130150
where TEvent : TBaseEvent
131151
{
152+
var handler = typeof(TBaseEvent) == typeof(TEvent)
153+
? (ICancelableEventHandler<TBaseEvent>)cancelableEventHandler
154+
: EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableEventHandler);
155+
132156
if (_eventDispatchers.TryGetValue<CancelableEventDispatcher<TEvent>>(out var cancelableEventDispatcher))
133-
return cancelableEventDispatcher!.RemoveHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(cancelableEventHandler));
157+
return cancelableEventDispatcher!.RemoveHandler(mod, handler);
134158

135159
return false;
136160
}
@@ -139,8 +163,12 @@ private bool UnregisterSyncEventHandler<TBaseEvent, TEvent>(Mod mod, IEventHandl
139163
where TBaseEvent : SyncEvent
140164
where TEvent : TBaseEvent
141165
{
166+
var handler = typeof(TBaseEvent) == typeof(TEvent)
167+
? (IEventHandler<TBaseEvent>)eventHandler
168+
: EventHandlerProxy.For<TBaseEvent, TEvent>(eventHandler);
169+
142170
if (_eventDispatchers.TryGetValue<EventDispatcher<TEvent>>(out var eventDispatcher))
143-
return eventDispatcher!.RemoveHandler(mod, EventHandlerProxy.For<TBaseEvent, TEvent>(eventHandler));
171+
return eventDispatcher!.RemoveHandler(mod, handler);
144172

145173
return false;
146174
}

MonkeyLoader/MonkeyLoader.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
1212
<Title>MonkeyLoader</Title>
1313
<Authors>Banane9</Authors>
14-
<Version>0.26.0-beta</Version>
14+
<Version>0.26.1-beta</Version>
1515
<Description>A convenience and extendability focused mod loader using NuGet packages.</Description>
1616
<PackageReadmeFile>README.md</PackageReadmeFile>
1717
<PackageLicenseExpression>LGPL-3.0-or-later</PackageLicenseExpression>

0 commit comments

Comments
 (0)