@Override protected void processDelivery(Delivery delivery) { final MessageDelivery md = (MessageDelivery) delivery.getContext(); if (delivery.remotelySettled()) { if (delivery.getTag().length > 0) { checkinTag(delivery.getTag()); } final DeliveryState state = delivery.getRemoteState(); if (state == null || state instanceof Accepted) { if (!delivery.remotelySettled()) { delivery.disposition(new Accepted()); } } else if (state instanceof Rejected) { // re-deliver /w incremented delivery counter. md.delivery = null; md.incrementDeliveryCount(); outbound.addLast(md); } else if (state instanceof Released) { // re-deliver && don't increment the counter. md.delivery = null; outbound.addLast(md); } else if (state instanceof Modified) { Modified modified = (Modified) state; if (modified.getDeliveryFailed()) { // increment delivery counter.. md.incrementDeliveryCount(); } } delivery.settle(); } md.fireWatches(); }
@Override public void onLinkFlow(Event event) { Sender snd = (Sender) event.getLink(); if (snd.getCredit() > 0 && snd.getLocalState() != EndpointState.CLOSED) { Message message = Proton.message(); ++count; message.setBody(new AmqpValue("message-" + count)); byte[] msgData = new byte[1024]; int length; while (true) { try { length = message.encode(msgData, 0, msgData.length); break; } catch (BufferOverflowException e) { msgData = new byte[msgData.length * 2]; } } byte[] tag = String.valueOf(count).getBytes(); Delivery dlv = snd.delivery(tag); snd.send(msgData, 0, length); dlv.settle(); snd.advance(); if (count == numMsgs) { snd.close(); snd.getSession().close(); snd.getSession().getConnection().close(); result = true; } } }
void setDispositionAndSettleIfRequired(IncommingMessage msg, DeliveryState state) { Delivery d = _unsettled.get(msg.getSequence()); d.disposition(state); if (d.getLink().getReceiverSettleMode() == ReceiverSettleMode.FIRST) { d.settle(); ((ReceiverImpl) d.getLink().getContext()).decrementUnsettledCount(); } }
protected void pumpDeliveries() { assertExecuting(); try { while (true) { while (currentBuffer != null) { if (sender.getCredit() > 0) { int sent = sender.send(currentBuffer.data, currentBuffer.offset, currentBuffer.length); currentBuffer.moveHead(sent); if (currentBuffer.length == 0) { Delivery current = currentDelivery; MessageDelivery md = (MessageDelivery) current.getContext(); currentBuffer = null; currentDelivery = null; if (qos == QoS.AT_MOST_ONCE) { current.settle(); } else { sender.advance(); } md.fireWatches(); } } else { return; } } if (outbound.isEmpty()) { return; } final MessageDelivery md = outbound.removeFirst(); outboundBufferSize -= md.initialSize; currentBuffer = md.encoded(); if (qos == QoS.AT_MOST_ONCE) { currentDelivery = sender.delivery(EMPTY_BYTE_ARRAY, 0, 0); } else { final byte[] tag = nextTag(); currentDelivery = sender.delivery(tag, 0, tag.length); } md.delivery = currentDelivery; currentDelivery.setContext(md); } } finally { fireWatches(); } }