/// <summary> /// Request a message from Pull queue /// </summary> public async Task <PullContainer> Pull(PullRequest request, Func <int, HorseMessage, Task> actionForEachMessage = null) { HorseMessage message = new HorseMessage(MessageType.QueuePullRequest, request.Queue); message.SetMessageId(_client.UniqueIdGenerator.Create()); message.AddHeader(HorseHeaders.COUNT, request.Count); if (request.ClearAfter == ClearDecision.AllMessages) { message.AddHeader(HorseHeaders.CLEAR, "all"); } else if (request.ClearAfter == ClearDecision.PriorityMessages) { message.AddHeader(HorseHeaders.CLEAR, "High-Priority"); } else if (request.ClearAfter == ClearDecision.Messages) { message.AddHeader(HorseHeaders.CLEAR, "Default-Priority"); } if (request.GetQueueMessageCounts) { message.AddHeader(HorseHeaders.INFO, "yes"); } if (request.Order == MessageOrder.LIFO) { message.AddHeader(HorseHeaders.ORDER, HorseHeaders.LIFO); } foreach (KeyValuePair <string, string> pair in request.RequestHeaders) { message.AddHeader(pair.Key, pair.Value); } PullContainer container = new PullContainer(message.MessageId, request.Count, actionForEachMessage); lock (PullContainers) PullContainers.Add(message.MessageId, container); HorseResult sent = await _client.SendAsync(message); if (sent.Code != HorseResultCode.Ok) { lock (PullContainers) PullContainers.Remove(message.MessageId); container.Complete("Error"); } return(await container.GetAwaitableTask()); }
/// <inheritdoc /> public Task <PullContainer> Pull(PullRequest request, Func <int, HorseMessage, Task> actionForEachMessage = null) { HorseClient client = _connector.GetClient(); if (client == null) { PullContainer con = new PullContainer(null, 0, null); con.Complete(HorseHeaders.ERROR); return(con.GetAwaitableTask()); } return(client.Queues.Pull(request, actionForEachMessage)); }