Esempio n. 1
0
        private async Task ProcessReceivedMessage(object message)
        {
            if (message is Ack ack)
            {
                if (_pendingMessageId != ack.MessageId)
                {
                    throw new InvalidOperationException("We screwed up.");
                }

                await _pendingMessage.Complete();

                _pendingMessage = null;
            }
            else if (message is Nak nak)
            {
                if (_pendingMessageId != nak.MessageId)
                {
                    throw new InvalidOperationException("We screwed up.");
                }

                await _pendingMessage.Abort();

                _pendingMessage = null;
            }
        }
Esempio n. 2
0
            public void Assign(DequeuedMessage message, int maxAttempts)
            {
                _maxAttempts = maxAttempts;
                _message     = message;

                if (Id.Equals(message.Message.MessageId))
                {
                    AttemptCount++;
                }
                else
                {
                    AttemptCount = 0;
                }
            }
Esempio n. 3
0
        private async Task DeliverQueuedMessages()
        {
            while (true)
            {
                try
                {
                    await _tcpClient.EnsureConnected();
                }
                catch (SocketException)
                {
                    await Task.Delay(5000);

                    continue;
                }


                _pendingMessage = await _fileQueue.Dequeue(TimeSpan.FromSeconds(10));

                if (_pendingMessage == null)
                {
                    continue;
                }

                try
                {
                    var transportMessage = new TransportMessage(_pendingMessage.Message);
                    _pendingMessageId = transportMessage.Id;
                    await _tcpClient.SendAsync(transportMessage);

                    await Task.Delay(600000);
                }
                catch
                {
                    await _pendingMessage.Abort();

                    _pendingMessage = null;
                    throw;
                }
            }
        }
Esempio n. 4
0
 public void Clear()
 {
     AttemptCount = 0;
     _message     = null;
 }