Пример #1
0
        /// <summary>
        /// Method to transmit the PutLogEvent Request
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task SendMessages(CancellationToken token)
        {
            try
            {
                var response = await _client.PutLogEventsAsync(_repo._request, token).ConfigureAwait(false);

                _repo.Reset(response.NextSequenceToken);
            }
            catch (TaskCanceledException tc)
            {
                // TODO how to log ?
                LogLibraryError(tc);
                throw;
            }
            catch (Exception e)
            {
                //In case the NextSequenceToken is invalid for the last sent message, a new stream would be
                //created for the said application.

                // TODO how to log ?
                LogLibraryError(e);

                await LogEventTransmissionSetup(token).ConfigureAwait(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Method to transmit the PutLogEvent Request
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task SendMessages(CancellationToken token)
        {
            try
            {
                var response = await _client.PutLogEventsAsync(_repo._request, token).ConfigureAwait(false);

                _repo.Reset(response.NextSequenceToken);
                requestCount = 5;
            }
            catch (InvalidSequenceTokenException ex)
            {
                //In case the NextSequenceToken is invalid for the last sent message, a new stream would be
                //created for the said application.
                LogLibraryError(ex, _config.LibraryLogFileName);
                if (requestCount > 0)
                {
                    requestCount--;
                    var regexResult = invalid_sequence_token_regex.Match(ex.Message);
                    if (regexResult.Success)
                    {
                        _repo._request.SequenceToken = regexResult.Groups[1].Value;
                        await SendMessages(token).ConfigureAwait(false);
                    }
                }
                else
                {
                    await LogEventTransmissionSetup(token).ConfigureAwait(false);
                }
            }
        }
        /// <summary>
        /// Method to transmit the PutLogEvent Request
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task SendMessages(CancellationToken token)
        {
            try
            {
                //Make sure the log events are in the right order.
                _repo._request.LogEvents.Sort((ev1, ev2) => ev1.Timestamp.CompareTo(ev2.Timestamp));
                var response = await _client.PutLogEventsAsync(_repo._request, token).ConfigureAwait(false);

                _repo.Reset(response.NextSequenceToken);
                _requestCount = 5;
            }
            catch (InvalidSequenceTokenException ex)
            {
                //In case the NextSequenceToken is invalid for the last sent message, a new stream would be
                //created for the said application.
                LogLibraryServiceError(ex);
                if (_requestCount > 0)
                {
                    _requestCount--;
                    var regexResult = invalid_sequence_token_regex.Match(ex.Message);
                    if (regexResult.Success)
                    {
                        _repo._request.SequenceToken = regexResult.Groups[1].Value;
                        await SendMessages(token).ConfigureAwait(false);
                    }
                }
                else
                {
                    _currentStreamName = await LogEventTransmissionSetup(token).ConfigureAwait(false);
                }
            }
        }