/// <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); }
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; }