Example #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;
            }
        }
Example #2
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;
                }
            }
        }