예제 #1
0
        /// <summary>
        /// Retrieve the next <see cref="T:ServiceBus.Queueing.QueuedMessage"/> for the given <paramref name="peer"/>.
        /// </summary>
        /// <param name="peer">The peer to check for <see cref="T:ServiceBus.Queueing.QueuedMessage"/>s.</param>
        /// <param name="messageQueuedBefore">The <see cref="T:System.DateTime"/> to find messages queued before.</param>
        /// <returns>
        /// The next <see cref="T:ServiceBus.Queueing.QueuedMessage"/> or null if the queue for the <paramref name="peer"/> is empty.
        /// </returns>
        public QueuedMessage PeersNextMessageOrDefault(IPeer peer, DateTime messageQueuedBefore)
        {
            var messages = this._ftpClient.GetFileListings(new Uri(peer.QueueLocation(), UriKind.Relative)).Result.ToList();

            if (!messages.Any(queuedDate => queuedDate > messageQueuedBefore))
            {
                return(null);
            }

            var messageQueuedAt = messages.OrderBy(m => m).First(queuedDate => queuedDate > messageQueuedBefore);

            var rawEnvelope =
                this._ftpClient.GetMessage(
                    new Uri(MessageExtensions.MessageLocation(peer, messageQueuedAt))).Result;

            var envelope = this._messageSerialiser.Deserialise(rawEnvelope);

            var queuedMessage = new QueuedMessage {
                QueuedAt = messageQueuedAt, Envelope = envelope, HasSent = false
            };

            return(queuedMessage);
        }
예제 #2
0
        public async Task CreatePeerDirectoryIfNotExist(IPeer peer)
        {
            if (this._ftpClient.GetShortDirectoryList().Any(dirName => dirName == peer.EscapePeerAddress()))
            {
                return;
            }

            this._ftpClient.MakeDir(peer.EscapePeerAddress());

            var createQueueDirectoryTask = Task.Factory.StartNew(() => this._ftpClient.MakeDir(peer.QueueLocation()));

            var createSentDirectoryTask = Task.Factory.StartNew(() => this._ftpClient.MakeDir(peer.SentLocation()));

            await createQueueDirectoryTask;
            await createSentDirectoryTask;
        }
예제 #3
0
        public async Task CreatePeerDirectoryIfNotExist(IPeer peer)
        {
            if (this._ftpClient.GetShortDirectoryList().Any(dirName => dirName == peer.EscapePeerAddress()))
            {
                return;
            }

            this._ftpClient.MakeDir(peer.EscapePeerAddress());

            var createQueueDirectoryTask = Task.Factory.StartNew(() => this._ftpClient.MakeDir(peer.QueueLocation()));

            var createSentDirectoryTask = Task.Factory.StartNew(() => this._ftpClient.MakeDir(peer.SentLocation()));

            await createQueueDirectoryTask;
            await createSentDirectoryTask;
        }