public StreamConsumer(StreamImpl <T> stream, string streamProviderName, IStreamProviderRuntime runtime, IStreamPubSub pubSub, ILogger logger, bool isRewindable)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }
            if (runtime == null)
            {
                throw new ArgumentNullException(nameof(runtime));
            }
            if (pubSub == null)
            {
                throw new ArgumentNullException(nameof(pubSub));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            this.logger             = logger;
            this.stream             = stream;
            this.streamProviderName = streamProviderName;
            this.providerRuntime    = runtime;
            this.pubSub             = pubSub;
            this.IsRewindable       = isRewindable;
            this.myExtension        = null;
            this.myGrainReference   = null;
            this.bindExtLock        = new AsyncLock();
        }
Example #2
0
        public StreamConsumer(StreamImpl <T> stream, string streamProviderName, IStreamProviderRuntime providerUtilities, IStreamPubSub pubSub, bool isRewindable)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (providerUtilities == null)
            {
                throw new ArgumentNullException("providerUtilities");
            }
            if (pubSub == null)
            {
                throw new ArgumentNullException("pubSub");
            }

            logger                  = TraceLogger.GetLogger(string.Format("StreamConsumer<{0}>-{1}", typeof(T).Name, stream), TraceLogger.LoggerType.Runtime);
            this.stream             = stream;
            this.streamProviderName = streamProviderName;
            providerRuntime         = providerUtilities;
            this.pubSub             = pubSub;
            IsRewindable            = isRewindable;
            myExtension             = null;
            myGrainReference        = null;
            bindExtLock             = new AsyncLock();
        }
Example #3
0
        internal StreamSubscriptionHandleImpl <T> SetObserver <T>(
            GuidId subscriptionId,
            StreamImpl <T> stream,
            IAsyncObserver <T> observer,
            IAsyncBatchObserver <T> batchObserver,
            StreamSequenceToken token,
            string filterData)
        {
            if (null == stream)
            {
                throw new ArgumentNullException("stream");
            }

            try
            {
                if (logger.IsEnabled(LogLevel.Debug))
                {
                    logger.Debug("{0} AddObserver for stream {1}", providerRuntime.ExecutingEntityIdentity(), stream.InternalStreamId);
                }

                // Note: The caller [StreamConsumer] already handles locking for Add/Remove operations, so we don't need to repeat here.
                var handle = new StreamSubscriptionHandleImpl <T>(subscriptionId, observer, batchObserver, stream, token, filterData);
                return(allStreamObservers.AddOrUpdate(subscriptionId, handle, (key, old) => handle) as StreamSubscriptionHandleImpl <T>);
            }
            catch (Exception exc)
            {
                logger.Error(ErrorCode.StreamProvider_AddObserverException,
                             $"{providerRuntime.ExecutingEntityIdentity()} StreamConsumerExtension.AddObserver({stream.InternalStreamId}) caugth exception.", exc);
                throw;
            }
        }
Example #4
0
 public ObserverWrapper(IAsyncObserver <T> observer, StreamImpl <T> stream, IStreamFilterPredicateWrapper filterWrapper)
 {
     this.observer      = observer;
     streamImpl         = stream;
     ObserverGuid       = Guid.NewGuid();
     this.filterWrapper = filterWrapper;
 }
Example #5
0
        internal StreamSubscriptionHandle <T> AddObserver <T>(StreamImpl <T> stream, IAsyncObserver <T> observer, IStreamFilterPredicateWrapper filter)
        {
            if (null == stream)
            {
                throw new ArgumentNullException("stream");
            }
            if (null == observer)
            {
                throw new ArgumentNullException("observer");
            }

            try
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("{0} AddObserver for stream {1}", providerRuntime.ExecutingEntityIdentity(), stream);
                }

                // Note: The caller [StreamConsumer] already handles locking for Add/Remove operations, so we don't need to repeat here.
                IStreamObservers obs = allStreamObservers.GetOrAdd(stream.StreamId, new ObserversCollection <T>());
                var wrapper          = new ObserverWrapper <T>(observer, stream, filter);
                ((ObserversCollection <T>)obs).AddObserver(wrapper);
                return(wrapper);
            }
            catch (Exception exc)
            {
                logger.Error((int)ErrorCode.StreamProvider_AddObserverException, String.Format("{0} StreamConsumerExtension.AddObserver({1}) caugth exception.",
                                                                                               providerRuntime.ExecutingEntityIdentity(), stream), exc);
                throw;
            }
        }
 public StreamSubscriptionHandleImpl(GuidId subscriptionId, IAsyncObserver <T> observer, IAsyncBatchObserver <T> batchObserver, StreamImpl <T> streamImpl, StreamSequenceToken token)
 {
     this.subscriptionId = subscriptionId ?? throw new ArgumentNullException("subscriptionId");
     this.observer       = observer;
     this.batchObserver  = batchObserver;
     this.streamImpl     = streamImpl ?? throw new ArgumentNullException("streamImpl");
     this.isRewindable   = streamImpl.IsRewindable;
     if (IsRewindable)
     {
         expectedToken = StreamHandshakeToken.CreateStartToken(token);
     }
 }
        internal PersistentStreamProducer(StreamImpl <T> stream, IStreamProviderRuntime providerUtilities, IQueueAdapter queueAdapter, bool isRewindable)
        {
            this.stream       = stream;
            this.queueAdapter = queueAdapter;
            IsRewindable      = isRewindable;
            var logger = providerUtilities.GetLogger(this.GetType().Name);

            if (logger.IsVerbose)
            {
                logger.Verbose("Created PersistentStreamProducer for stream {0}, of type {1}, and with Adapter: {2}.",
                               stream.ToString(), typeof(T), this.queueAdapter.Name);
            }
        }
        internal PersistentStreamProducer(StreamImpl <T> stream, IStreamProviderRuntime providerUtilities, IQueueAdapter queueAdapter, bool isRewindable, SerializationManager serializationManager)
        {
            this.stream               = stream;
            this.queueAdapter         = queueAdapter;
            this.serializationManager = serializationManager;
            IsRewindable              = isRewindable;
            var logger = providerUtilities.ServiceProvider.GetRequiredService <ILoggerFactory>().CreateLogger(this.GetType().Name);

            if (logger.IsEnabled(LogLevel.Debug))
            {
                logger.Debug("Created PersistentStreamProducer for stream {0}, of type {1}, and with Adapter: {2}.",
                             stream.ToString(), typeof(T), this.queueAdapter.Name);
            }
        }
        internal PersistentStreamProducer(StreamImpl <T> stream, IStreamProviderRuntime providerUtilities, IQueueAdapter queueAdapter, bool isRewindable, DeepCopier deepCopier)
        {
            this.stream       = stream;
            this.queueAdapter = queueAdapter;
            this.deepCopier   = deepCopier;
            IsRewindable      = isRewindable;
            var logger = providerUtilities.ServiceProvider.GetRequiredService <ILogger <PersistentStreamProducer <T> > >();

            if (logger.IsEnabled(LogLevel.Debug))
            {
                logger.LogDebug("Created PersistentStreamProducer for stream {StreamId}, of type {ElementType}, and with Adapter: {QueueAdapterName}.",
                                stream.ToString(), typeof(T), this.queueAdapter.Name);
            }
        }
Example #10
0
        public StreamSubscriptionHandleImpl(GuidId subscriptionId, IAsyncObserver <T> observer, StreamImpl <T> streamImpl, IStreamFilterPredicateWrapper filterWrapper, StreamSequenceToken token)
        {
            if (subscriptionId == null)
            {
                throw new ArgumentNullException("subscriptionId");
            }
            if (streamImpl == null)
            {
                throw new ArgumentNullException("streamImpl");
            }

            this.subscriptionId = subscriptionId;
            this.observer       = observer;
            this.streamImpl     = streamImpl;
            this.filterWrapper  = filterWrapper;
            expectedToken       = StreamHandshakeToken.CreateStartToken(token);
        }
Example #11
0
        public StreamSubscriptionHandleImpl(GuidId subscriptionId, IAsyncObserver <T> observer, StreamImpl <T> stream, IStreamFilterPredicateWrapper filterWrapper)
        {
            if (subscriptionId == null)
            {
                throw new ArgumentNullException("subscriptionId");
            }
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            IsValid             = true;
            this.observer       = observer;
            streamImpl          = stream;
            this.SubscriptionId = subscriptionId;
            this.filterWrapper  = filterWrapper;
        }
        internal StreamSubscriptionHandleImpl <T> SetObserver <T>(GuidId subscriptionId, StreamImpl <T> stream, IAsyncObserver <T> observer, StreamSequenceToken token, IStreamFilterPredicateWrapper filter)
        {
            if (null == stream)
            {
                throw new ArgumentNullException("stream");
            }
            if (null == observer)
            {
                throw new ArgumentNullException("observer");
            }

            try
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("{0} AddObserver for stream {1}", providerRuntime.ExecutingEntityIdentity(), stream.StreamId);
                }

                // Note: The caller [StreamConsumer] already handles locking for Add/Remove operations, so we don't need to repeat here.
                var handle = new StreamSubscriptionHandleImpl <T>(subscriptionId, observer, stream, filter, token);
                return(allStreamObservers.AddOrUpdate(subscriptionId, handle, (key, old) => handle) as StreamSubscriptionHandleImpl <T>);
            }
            catch (Exception exc)
            {
                logger.Error((int)ErrorCode.StreamProvider_AddObserverException, String.Format("{0} StreamConsumerExtension.AddObserver({1}) caugth exception.",
                                                                                               providerRuntime.ExecutingEntityIdentity(), stream.StreamId), exc);
                throw;
            }
        }
Example #13
0
 public void Invalidate()
 {
     streamImpl = null;
     observer   = null;
 }
Example #14
0
 public StreamSubscriptionHandleImpl(GuidId subscriptionId, StreamImpl <T> streamImpl)
     : this(subscriptionId, null, streamImpl, null, null)
 {
 }
 public void Invalidate()
 {
     this.streamImpl    = null;
     this.observer      = null;
     this.batchObserver = null;
 }
Example #16
0
 public StreamSubscriptionHandleImpl(GuidId subscriptionId, StreamImpl <T> streamImpl, bool isRewindable)
     : this(subscriptionId, null, streamImpl, isRewindable, null, null)
 {
 }