public void nextReceiver()

in protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientNextReceiverSelector.java [55:99]


    public void nextReceiver(ClientFuture<Receiver> request, NextReceiverPolicy policy, long timeout) {
        Objects.requireNonNull(policy, "The next receiver selection policy cannot be null");

        ClientReceiver result = null;

        switch (policy) {
            case ROUND_ROBIN:
                result = selectNextAvailable();
                break;
            case FIRST_AVAILABLE:
                result = selectFirstAvailable();
                break;
            case LARGEST_BACKLOG:
                result = selectLargestBacklog();
                break;
            case SMALLEST_BACKLOG:
                result = selectSmallestBacklog();
                break;
            case RANDOM:
                result = selectRandomReceiver();
                break;
            default:
                request.failed(new ClientException("Next receiver called with invalid or unknown policy:" + policy));
                break;
        }

        if (result == null) {
            pending.add(request); // Wait for the next incoming delivery
            if (timeout > 0) {
                session.getScheduler().schedule(() -> {
                    if (!request.isDone()) {
                        pending.remove(request);
                        request.complete(null);
                    }
                }, timeout, TimeUnit.MILLISECONDS);
            }
        } else {
            // Track last returned to update state for Round Robin next receiver dispatch
            // this effectively ties all policies together in updating the next result from
            // a call that requests the round robin fairness policy.
            result.protonLink().getSession().getAttachments().set(LAST_RETURNED_STATE_KEY, result);

            request.complete(result);
        }
    }