@@ -14,7 +14,7 @@ internal class EventExecutor : IAsyncDisposable
14
14
{
15
15
private readonly object _lockObj = new object ( ) ;
16
16
public readonly Channel < object > EventChannel = Channel . CreateBounded < object > ( 1 ) ;
17
- private FeatureProvider _defaultProvider ;
17
+ private FeatureProvider ? _defaultProvider ;
18
18
private readonly Dictionary < string , FeatureProvider > _namedProviderReferences = new Dictionary < string , FeatureProvider > ( ) ;
19
19
private readonly List < FeatureProvider > _activeSubscriptions = new List < FeatureProvider > ( ) ;
20
20
@@ -99,7 +99,7 @@ internal void RemoveClientHandler(string client, ProviderEventTypes type, EventH
99
99
}
100
100
}
101
101
102
- internal void RegisterDefaultFeatureProvider ( FeatureProvider provider )
102
+ internal void RegisterDefaultFeatureProvider ( FeatureProvider ? provider )
103
103
{
104
104
if ( provider == null )
105
105
{
@@ -115,7 +115,7 @@ internal void RegisterDefaultFeatureProvider(FeatureProvider provider)
115
115
}
116
116
}
117
117
118
- internal void RegisterClientFeatureProvider ( string client , FeatureProvider provider )
118
+ internal void RegisterClientFeatureProvider ( string client , FeatureProvider ? provider )
119
119
{
120
120
if ( provider == null )
121
121
{
@@ -124,7 +124,7 @@ internal void RegisterClientFeatureProvider(string client, FeatureProvider provi
124
124
lock ( this . _lockObj )
125
125
{
126
126
var newProvider = provider ;
127
- FeatureProvider oldProvider = null ;
127
+ FeatureProvider ? oldProvider = null ;
128
128
if ( this . _namedProviderReferences . TryGetValue ( client , out var foundOldProvider ) )
129
129
{
130
130
oldProvider = foundOldProvider ;
@@ -136,7 +136,7 @@ internal void RegisterClientFeatureProvider(string client, FeatureProvider provi
136
136
}
137
137
}
138
138
139
- private void StartListeningAndShutdownOld ( FeatureProvider newProvider , FeatureProvider oldProvider )
139
+ private void StartListeningAndShutdownOld ( FeatureProvider newProvider , FeatureProvider ? oldProvider )
140
140
{
141
141
// check if the provider is already active - if not, we need to start listening for its emitted events
142
142
if ( ! this . IsProviderActive ( newProvider ) )
@@ -174,7 +174,7 @@ private bool IsProviderActive(FeatureProvider providerRef)
174
174
return this . _activeSubscriptions . Contains ( providerRef ) ;
175
175
}
176
176
177
- private void EmitOnRegistration ( FeatureProvider provider , ProviderEventTypes eventType , EventHandlerDelegate handler )
177
+ private void EmitOnRegistration ( FeatureProvider ? provider , ProviderEventTypes eventType , EventHandlerDelegate handler )
178
178
{
179
179
if ( provider == null )
180
180
{
@@ -202,22 +202,22 @@ private void EmitOnRegistration(FeatureProvider provider, ProviderEventTypes eve
202
202
{
203
203
handler . Invoke ( new ProviderEventPayload
204
204
{
205
- ProviderName = provider . GetMetadata ( ) ? . Name ,
205
+ ProviderName = provider . GetMetadata ( ) . Name ,
206
206
Type = eventType ,
207
207
Message = message
208
208
} ) ;
209
209
}
210
210
catch ( Exception exc )
211
211
{
212
- this . Logger ? . LogError ( "Error running handler: " + exc ) ;
212
+ this . Logger . LogError ( exc , "Error running handler" ) ;
213
213
}
214
214
}
215
215
}
216
216
217
- private async void ProcessFeatureProviderEventsAsync ( object providerRef )
217
+ private async void ProcessFeatureProviderEventsAsync ( object ? providerRef )
218
218
{
219
- var typedProviderRef = ( FeatureProvider ) providerRef ;
220
- if ( typedProviderRef . GetEventChannel ( ) is not { Reader : { } reader } )
219
+ var typedProviderRef = ( FeatureProvider ? ) providerRef ;
220
+ if ( typedProviderRef ? . GetEventChannel ( ) is not { Reader : { } reader } )
221
221
{
222
222
return ;
223
223
}
@@ -249,7 +249,7 @@ private async void ProcessEventAsync()
249
249
case Event e :
250
250
lock ( this . _lockObj )
251
251
{
252
- if ( this . _apiHandlers . TryGetValue ( e . EventPayload . Type , out var eventHandlers ) )
252
+ if ( e . EventPayload ? . Type != null && this . _apiHandlers . TryGetValue ( e . EventPayload . Type , out var eventHandlers ) )
253
253
{
254
254
foreach ( var eventHandler in eventHandlers )
255
255
{
@@ -260,11 +260,11 @@ private async void ProcessEventAsync()
260
260
// look for client handlers and call invoke method there
261
261
foreach ( var keyAndValue in this . _namedProviderReferences )
262
262
{
263
- if ( keyAndValue . Value == e . Provider )
263
+ if ( keyAndValue . Value == e . Provider && keyAndValue . Key != null )
264
264
{
265
265
if ( this . _clientHandlers . TryGetValue ( keyAndValue . Key , out var clientRegistry ) )
266
266
{
267
- if ( clientRegistry . TryGetValue ( e . EventPayload . Type , out var clientEventHandlers ) )
267
+ if ( e . EventPayload ? . Type != null && clientRegistry . TryGetValue ( e . EventPayload . Type , out var clientEventHandlers ) )
268
268
{
269
269
foreach ( var eventHandler in clientEventHandlers )
270
270
{
@@ -288,7 +288,7 @@ private async void ProcessEventAsync()
288
288
// if there is an association for the client to a specific feature provider, then continue
289
289
continue ;
290
290
}
291
- if ( keyAndValues . Value . TryGetValue ( e . EventPayload . Type , out var clientEventHandlers ) )
291
+ if ( e . EventPayload ? . Type != null && keyAndValues . Value . TryGetValue ( e . EventPayload . Type , out var clientEventHandlers ) )
292
292
{
293
293
foreach ( var eventHandler in clientEventHandlers )
294
294
{
@@ -311,7 +311,7 @@ private void InvokeEventHandler(EventHandlerDelegate eventHandler, Event e)
311
311
}
312
312
catch ( Exception exc )
313
313
{
314
- this . Logger ? . LogError ( "Error running handler: " + exc ) ;
314
+ this . Logger . LogError ( exc , "Error running handler" ) ;
315
315
}
316
316
}
317
317
@@ -325,7 +325,7 @@ public async Task Shutdown()
325
325
326
326
internal class Event
327
327
{
328
- internal FeatureProvider Provider { get ; set ; }
329
- internal ProviderEventPayload EventPayload { get ; set ; }
328
+ internal FeatureProvider ? Provider { get ; set ; }
329
+ internal ProviderEventPayload ? EventPayload { get ; set ; }
330
330
}
331
331
}
0 commit comments