private async Task <Guid> SubscribeAsync(Action <MultiMapEventHandlers <TKey, TValue> > events, Maybe <TKey> key, bool includeValues, object state) { if (events == null) { throw new ArgumentNullException(nameof(events)); } var handlers = new MultiMapEventHandlers <TKey, TValue>(); events(handlers); // 0: no entryKey // 1: entryKey var mode = key.Match(1, 0); var keyv = key.ValueOrDefault(); var subscribeRequest = mode switch { 0 => MultiMapAddEntryListenerCodec.EncodeRequest(Name, includeValues, Cluster.IsSmartRouting), 1 => MultiMapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(keyv), includeValues, Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new MapSubscriptionState(mode, Name, handlers, state)); await Cluster.Events.InstallSubscriptionAsync(subscription).CfAwait(); return(subscription.Id); }
private async Task <Guid> SubscribeAsync(bool includeValues, IPredicate predicate, bool hasPredicate, TKey key, bool hasKey, Action <DictionaryEventHandlers <TKey, TValue> > handle, CancellationToken cancellationToken) { if (hasKey && key == null) { throw new ArgumentNullException(nameof(key)); } if (hasPredicate && predicate == null) { throw new ArgumentNullException(nameof(predicate)); } if (handle == null) { throw new ArgumentNullException(nameof(handle)); } var handlers = new DictionaryEventHandlers <TKey, TValue>(); handle(handlers); var flags = HDictionaryEventTypes.Nothing; foreach (var handler in handlers) { flags |= handler.EventType; } // 0: no entryKey, no predicate // 1: entryKey, no predicate // 2: no entryKey, predicate // 3: entryKey, predicate var mode = (hasKey ? 1 : 0) + (hasPredicate ? 2 : 0); var subscribeRequest = mode switch { 0 => MapAddEntryListenerCodec.EncodeRequest(Name, includeValues, (int)flags, Cluster.IsSmartRouting), 1 => MapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(key), includeValues, (int)flags, Cluster.IsSmartRouting), 2 => MapAddEntryListenerWithPredicateCodec.EncodeRequest(Name, ToData(predicate), includeValues, (int)flags, Cluster.IsSmartRouting), 3 => MapAddEntryListenerToKeyWithPredicateCodec.EncodeRequest(Name, ToData(key), ToData(predicate), includeValues, (int)flags, Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new MapSubscriptionState(mode, Name, handlers)); await Cluster.Events.InstallSubscriptionAsync(subscription, cancellationToken).CAF(); return(subscription.Id); }
/// <summary> /// Subscribes to invalidation events. /// </summary> private async ValueTask <Guid> SubscribeToInvalidationEventsAsync() { var subscription = new ClusterSubscription( MapAddNearCacheInvalidationListenerCodec.EncodeRequest(Name, (int)MapEventTypes.Invalidated, false), (message, state) => MapAddNearCacheInvalidationListenerCodec.DecodeResponse(message).Response, (id, state) => MapRemoveEntryListenerCodec.EncodeRequest(((EventState)state).Name, id), (message, state) => MapRemoveEntryListenerCodec.DecodeResponse(message).Response, (message, state) => MapAddNearCacheInvalidationListenerCodec.HandleEventAsync(message, HandleCodecSingleEvent, HandleCodecBatchEvent, null, LoggerFactory), new EventState { Name = Name }); await Cluster.Events.InstallSubscriptionAsync(subscription, CancellationToken.None).CfAwait(); return(subscription.Id); }
private async Task <Guid> SubscribeAsync(Action <MapEventHandlers <TKey, TValue> > events, Maybe <TKey> key, IPredicate predicate, bool includeValues, object state, CancellationToken cancellationToken) { if (events == null) { throw new ArgumentNullException(nameof(events)); } var handlers = new MapEventHandlers <TKey, TValue>(); events(handlers); var flags = default(MapEventTypes); foreach (var handler in handlers) { flags |= handler.EventType; } // 0: no entryKey, no predicate // 1: entryKey, no predicate // 2: no entryKey, predicate // 3: entryKey, predicate var mode = key.Match(1, 0) + (predicate != null ? 2 : 0); var keyv = key.ValueOrDefault(); var subscribeRequest = mode switch { 0 => MapAddEntryListenerCodec.EncodeRequest(Name, includeValues, (int)flags, Cluster.IsSmartRouting), 1 => MapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(keyv), includeValues, (int)flags, Cluster.IsSmartRouting), 2 => MapAddEntryListenerWithPredicateCodec.EncodeRequest(Name, ToData(predicate), includeValues, (int)flags, Cluster.IsSmartRouting), 3 => MapAddEntryListenerToKeyWithPredicateCodec.EncodeRequest(Name, ToData(keyv), ToData(predicate), includeValues, (int)flags, Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new MapSubscriptionState(mode, Name, handlers, state)); await Cluster.Events.AddSubscriptionAsync(subscription, cancellationToken).CfAwait(); return(subscription.Id); }
private async Task <Guid> SubscribeAsync(IPredicate predicate, bool hasPredicate, TKey key, bool hasKey, Action <ReplicatedDictionaryEventHandlers <TKey, TValue> > handle) { if (hasKey && key == null) { throw new ArgumentNullException(nameof(key)); } if (hasPredicate && predicate == null) { throw new ArgumentNullException(nameof(predicate)); } if (handle == null) { throw new ArgumentNullException(nameof(handle)); } var handlers = new ReplicatedDictionaryEventHandlers <TKey, TValue>(); handle(handlers); // 0: no entryKey, no predicate // 1: entryKey, no predicate // 2: no entryKey, predicate // 3: entryKey, predicate var mode = (hasKey ? 1 : 0) + (hasPredicate ? 2 : 0); var subscribeRequest = mode switch { 0 => ReplicatedMapAddEntryListenerCodec.EncodeRequest(Name, Cluster.IsSmartRouting), 1 => ReplicatedMapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(key), Cluster.IsSmartRouting), 2 => ReplicatedMapAddEntryListenerWithPredicateCodec.EncodeRequest(Name, ToData(predicate), Cluster.IsSmartRouting), 3 => ReplicatedMapAddEntryListenerToKeyWithPredicateCodec.EncodeRequest(Name, ToData(key), ToData(predicate), Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new MapSubscriptionState(mode, Name, handlers)); await Cluster.Events.InstallSubscriptionAsync(subscription).CAF(); return(subscription.Id); }
/// <inheritdoc /> public async Task <Guid> SubscribeAsync(Action <CollectionItemEventHandlers <T> > handle, bool includeValue = true) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } var handlers = new CollectionItemEventHandlers <T>(); handle(handlers); var subscription = new ClusterSubscription( CreateSubscribeRequest(includeValue, Cluster.IsSmartRouting), ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new SubscriptionState <CollectionItemEventHandlers <T> >(Name, handlers)); await Cluster.Events.InstallSubscriptionAsync(subscription).CAF(); return(subscription.Id); }
private async Task <Guid> SubscribeAsync(Action <ReplicatedMapEventHandlers <TKey, TValue> > events, Maybe <TKey> key, IPredicate predicate, object state) { if (events == null) { throw new ArgumentNullException(nameof(events)); } var handlers = new ReplicatedMapEventHandlers <TKey, TValue>(); events(handlers); // 0: no entryKey, no predicate // 1: entryKey, no predicate // 2: no entryKey, predicate // 3: entryKey, predicate var mode = key.Match(1, 0) + (predicate != null ? 2 : 0); var keyv = key.ValueOrDefault(); var subscribeRequest = mode switch { 0 => ReplicatedMapAddEntryListenerCodec.EncodeRequest(Name, Cluster.IsSmartRouting), 1 => ReplicatedMapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(keyv), Cluster.IsSmartRouting), 2 => ReplicatedMapAddEntryListenerWithPredicateCodec.EncodeRequest(Name, ToData(predicate), Cluster.IsSmartRouting), 3 => ReplicatedMapAddEntryListenerToKeyWithPredicateCodec.EncodeRequest(Name, ToData(keyv), ToData(predicate), Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new SubscriptionState(mode, Name, handlers, state)); await Cluster.Events.InstallSubscriptionAsync(subscription).CfAwait(); return(subscription.Id); }
private async Task <Guid> SubscribeAsync(bool includeValues, TKey key, bool hasKey, Action <MultiDictionaryEventHandlers <TKey, TValue> > handle) { if (hasKey && key == null) { throw new ArgumentNullException(nameof(key)); } if (handle == null) { throw new ArgumentNullException(nameof(handle)); } var handlers = new MultiDictionaryEventHandlers <TKey, TValue>(); handle(handlers); // 0: no entryKey // 1: entryKey var mode = hasKey ? 1 : 0; var subscribeRequest = mode switch { 0 => MultiMapAddEntryListenerCodec.EncodeRequest(Name, includeValues, Cluster.IsSmartRouting), 1 => MultiMapAddEntryListenerToKeyCodec.EncodeRequest(Name, ToData(key), includeValues, Cluster.IsSmartRouting), _ => throw new NotSupportedException() }; var subscription = new ClusterSubscription( subscribeRequest, ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new MapSubscriptionState(mode, Name, handlers)); await Cluster.Events.InstallSubscriptionAsync(subscription).CAF(); return(subscription.Id); }
/// <inheritdoc /> public async Task <Guid> SubscribeAsync(Action <TopicEventHandlers <T> > handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } var handlers = new TopicEventHandlers <T>(); handle(handlers); var subscription = new ClusterSubscription( TopicAddMessageListenerCodec.EncodeRequest(Name, Cluster.IsSmartRouting), ReadSubscribeResponse, CreateUnsubscribeRequest, ReadUnsubscribeResponse, HandleEventAsync, new SubscriptionState <TopicEventHandlers <T> >(Name, handlers)); await Cluster.Events.InstallSubscriptionAsync(subscription).CAF(); return(subscription.Id); }