}); sender.closeHandler(x -> { vertx.cancelTimer(timer); sender.close();
@Override public void onError(Throwable t) { Objects.requireNonNull(t, "An error must be supplied when calling onError"); if(!completed.getAndSet(true)) { connCtx.runOnContext(x-> { // clear the handlers, we are done sender.sendQueueDrainHandler(null); sender.detachHandler(null); sender.closeHandler(null); sender.close(); }); } }
@Override public void onComplete() { if(!completed.getAndSet(true)) { connCtx.runOnContext(x-> { // clear the handlers, we are done sender.sendQueueDrainHandler(null); sender.detachHandler(null); sender.closeHandler(null); sender.close(); }); } }
sender.closeHandler(closed -> { if (closed.succeeded()) { LOG.debug("sender [{}] for container [{}] closed", address, connection.getRemoteContainer());
sender.closeHandler(result -> { if (result.succeeded()) { log.info(this + ": sender closed");
sender.closeHandler(handle -> { vertx.executeBlocking(promise -> { synchronized (this) {
@Override public void connectionOpened(ProtonConnection connection) { ProtonSender sender = connection.createSender(linkOptions.getTarget().getAddress()); sender.setTarget(linkOptions.getTarget()); sender.setQoS(clientOptions.getQos()); sender.openHandler(result -> { if (result.succeeded()) { log.info("Sender link '" + sender.getTarget().getAddress() + "' opened, sending messages"); connectPromise.complete(null); sendNext(connection, sender); } else { handleError(connection, sender.getRemoteCondition()); } }); sender.closeHandler(result -> handleError(connection, sender.getRemoteCondition())); sender.open(); }
@Override public void onLinkAttach(final ProtonSender sender, final ResourceIdentifier targetResource) { /* note: we "misuse" deviceId part of the resource as reply address here */ if (targetResource.getResourceId() == null) { logger.debug("link target provided in client's link ATTACH does not match pattern \"registration/<tenant>/<reply-address>\""); sender.setCondition(condition(AmqpError.INVALID_FIELD.toString(), "link target must have the following format registration/<tenant>/<reply-address>")); sender.close(); } else { logger.debug("establishing sender link with client [{}]", MessageHelper.getLinkName(sender)); final MessageConsumer<JsonObject> replyConsumer = vertx.eventBus().consumer(targetResource.toString(), message -> { // TODO check for correct session here...? logger.trace("forwarding reply to client: {}", message.body()); final Message amqpReply = RegistrationConstants.getAmqpReply(message); sender.send(amqpReply); }); sender.closeHandler(senderClosed -> { replyConsumer.unregister(); senderClosed.result().close(); final String linkName = MessageHelper.getLinkName(sender); logger.debug("receiver closed link [{}], removing associated event bus consumer [{}]", linkName, replyConsumer.address()); }); sender.setQoS(ProtonQoS.AT_LEAST_ONCE).open(); } }
}); sender.closeHandler(res-> { cancelSub(); sender.close();
.closeHandler(ar -> { if (ar.succeeded()) { this.processCloseSender(ar.result());
serverSender.closeHandler(x -> { serverSender.close(); });
serverSender.closeHandler(x -> { serverSender.close(); });