protected override async Task ConnectAsync()
        {
            //Get subscription position
            _position = await _subscriptionManager.GetSubscriptionPosition(_subscriptionId, true);

            _store = await _storeProvider.GetStreamStore();

            if (_streamId == null)
            {
                _allSubscription = _store.SubscribeToAll(_position,
                                                         HandleSubscriptionEvent,
                                                         HandleSubscriptionDropped);
                _status    = SubscriptionConnectionStatus.Connected;
                _startDate = DateTime.UtcNow;
            }
            else
            {
                int?intPos = (_position != null) ? Convert.ToInt32(_position) : default(int?);
                _subscription = _store.SubscribeToStream(_streamId.Id, intPos,
                                                         HandleSubscriptionEvent,
                                                         HandleSubscriptionDropped);
                _status    = SubscriptionConnectionStatus.Connected;
                _startDate = DateTime.UtcNow;
            }
        }
        private void HandleSubscriptionDropped(IStreamSubscription subscription, SubscriptionDroppedReason reason, Exception exception = null)
        {
            if (_cancellationRequestedByUser)
            {
                _logger.LogInformation($"Subscription stopped by user: {subscription.Name}");
                _connected = false;
                return;
            }

            if (exception != null)
            {
                _logger.LogError(exception, $"{subscription.Name} subscription dropped: {reason.ToString()}");
            }
            else
            {
                _logger.LogError($"{subscription.Name} subscription dropped: {reason.ToString()}");
            }
            _connected = false;
        }
        protected override async Task ConnectAsync()
        {
            _store = await _storeProvider.GetStreamStore();

            if (_streamId == null)
            {
                _allSubscription = _store.SubscribeToAll(
                    _startPosition == StreamPosition.End ? -1 : 0,
                    (_, message, cancellationToken) =>
                {
                    return(HandleEvent(message, cancellationToken));
                },
                    (sub, reason, ex) =>
                {
                    HandleSubscriptionDropped(sub, reason, ex);
                });
                _status    = SubscriptionConnectionStatus.Connected;
                _startDate = DateTime.UtcNow;
            }
            else
            {
                _streamSubscription = _store.SubscribeToStream(
                    _streamId.Id,
                    _startPosition == StreamPosition.End ? -1 : 0,
                    (_, message, cancellationToken) =>
                {
                    return(HandleEvent(message, cancellationToken));
                },
                    (sub, reason, ex) =>
                {
                    HandleSubscriptionDropped(sub, reason, ex);
                });
                _status    = SubscriptionConnectionStatus.Connected;
                _startDate = DateTime.UtcNow;
            }
        }
 private Task HandleSubscriptionEvent(IStreamSubscription subscription, StreamMessage message, CancellationToken token)
 {
     return(HandleEvent(message, token));
 }