private ValueTask HandleEventAsync(ClientMessage eventMessage, object state) { var sstate = ToSafeState <MapSubscriptionState>(state); return(sstate.Mode switch { 0 => MapAddEntryListenerCodec.HandleEventAsync(eventMessage, HandleEntryEvent, state, LoggerFactory), 1 => MapAddEntryListenerToKeyCodec.HandleEventAsync(eventMessage, HandleEntryEvent, state, LoggerFactory), 2 => MapAddEntryListenerWithPredicateCodec.HandleEventAsync(eventMessage, HandleEntryEvent, state, LoggerFactory), 3 => MapAddEntryListenerToKeyWithPredicateCodec.HandleEventAsync(eventMessage, HandleEntryEvent, state, LoggerFactory), _ => throw new NotSupportedException() });
private ValueTask HandleEventAsync(ClientMessage eventMessage, object state) { var sstate = ToSafeState <MapSubscriptionState>(state); async ValueTask HandleEntryEvent(IData keyData, IData valueData, IData oldValueData, IData mergingValueData, int eventTypeData, Guid memberId, int numberOfAffectedEntries) { var eventType = (HDictionaryEventTypes)eventTypeData; if (eventType == HDictionaryEventTypes.Nothing) { return; } var member = Cluster.Members.GetMember(memberId); var key = LazyArg <TKey>(keyData); var value = LazyArg <TValue>(valueData); var oldValue = LazyArg <TValue>(oldValueData); var mergingValue = LazyArg <TValue>(mergingValueData); // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var handler in sstate.Handlers) { if (handler.EventType.HasAll(eventType)) { var task = handler switch { IDictionaryEntryEventHandler <TKey, TValue, IHDictionary <TKey, TValue> > entryHandler => entryHandler.HandleAsync(this, member, key, value, oldValue, mergingValue, eventType, numberOfAffectedEntries), IDictionaryEventHandler <TKey, TValue, IHDictionary <TKey, TValue> > mapHandler => mapHandler.HandleAsync(this, member, numberOfAffectedEntries), _ => throw new NotSupportedException() }; await task.CAF(); } } } return(sstate.Mode switch { 0 => MapAddEntryListenerCodec.HandleEventAsync(eventMessage, HandleEntryEvent, LoggerFactory), 1 => MapAddEntryListenerToKeyCodec.HandleEventAsync(eventMessage, HandleEntryEvent, LoggerFactory), 2 => MapAddEntryListenerWithPredicateCodec.HandleEventAsync(eventMessage, HandleEntryEvent, LoggerFactory), 3 => MapAddEntryListenerToKeyWithPredicateCodec.HandleEventAsync(eventMessage, HandleEntryEvent, LoggerFactory), _ => throw new NotSupportedException() }); }