public void onFlowConsumer(Object consumer, int credits, final boolean drain) { ServerConsumerImpl serverConsumer = (ServerConsumerImpl) consumer; if (drain) { // If the draining is already running, then don't do anything if (draining.compareAndSet(false, true)) { final ProtonServerSenderContext plugSender = (ProtonServerSenderContext) serverConsumer.getProtocolContext(); serverConsumer.forceDelivery(1, new Runnable() { @Override public void run() { try { plugSender.reportDrained(); } finally { draining.set(false); } } }); } } else { serverConsumer.receiveCredits(-1); } }
@Override public void onFlow(int currentCredits, boolean drain) { connection.requireInHandler(); setupCredit(); ServerConsumerImpl serverConsumer = (ServerConsumerImpl) brokerConsumer; if (drain) { // If the draining is already running, then don't do anything if (draining.compareAndSet(false, true)) { final ProtonServerSenderContext plugSender = (ProtonServerSenderContext) serverConsumer.getProtocolContext(); serverConsumer.forceDelivery(1, new Runnable() { @Override public void run() { try { connection.runNow(() -> { plugSender.reportDrained(); setupCredit(); }); } finally { draining.set(false); } } }); } } else { serverConsumer.receiveCredits(-1); } }