public void ResultReceived(SendMessageResultCommand result) { if (result != null) { Pair<SendMessageCommand, SettableFuture<bool>> pair = null; lock (syncRoot) { commands.TryRemove(result.Header.CorrelationId, out pair); } if (pair != null) { try { SendMessageCommand sendMessageCommand = pair.Key; SettableFuture<bool> future = pair.Value; if (IsResultSuccess(result)) { future.Set(true); } else { future.Set(false); } sendMessageCommand.OnResultReceived(result); Tracking(sendMessageCommand, true); } catch (Exception ex) { log.Warn(ex); } } } }
public void OnResultReceived(SendMessageResultCommand result) { foreach (var entry in futures) { if (result.IsSuccess(entry.Key)) entry.Value.Set(new SendResult()); else entry.Value.SetException(new MessageSendException("Send failed")); } }
private bool IsResultSuccess(SendMessageResultCommand result) { Dictionary<int, bool> successes = result.Successes; foreach (bool success in successes.Values) { if (!success) { return false; } } return true; }