/** * Sets a handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code false} is received from the peer. * <p> * The resources maintained for the link will be freed up after the given handler has * been invoked. * * @param <T> The type of link. * @param link The link to set the handler on. * @param handler The handler to invoke. * @return The wrapper that has been created around the given handler. * @throws NullPointerException if link or handler are {@code null}. */ public static <T extends ProtonLink<T>> Handler<AsyncResult<T>> setDetachHandler( final ProtonLink<T> link, final Handler<AsyncResult<T>> handler) { Objects.requireNonNull(link); Objects.requireNonNull(handler); final Handler<AsyncResult<T>> wrappedHandler = remoteDetach -> { handler.handle(remoteDetach); link.free(); }; link.detachHandler(wrappedHandler); return wrappedHandler; }
/** * Sets a handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code true} is received from the peer. * <p> * The resources maintained for the link will be freed up after the given handler has * been invoked. * * @param <T> The type of link. * @param link The link to set the handler on. * @param handler The handler to invoke. * @return The wrapper that has been created around the given handler. * @throws NullPointerException if link or handler are {@code null}. */ public static <T extends ProtonLink<T>> Handler<AsyncResult<T>> setCloseHandler( final ProtonLink<T> link, final Handler<AsyncResult<T>> handler) { Objects.requireNonNull(link); Objects.requireNonNull(handler); final Handler<AsyncResult<T>> wrappedHandler = remoteClose -> { handler.handle(remoteClose); link.free(); }; link.closeHandler(wrappedHandler); return wrappedHandler; }
/** * Sets a handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code false} is received from the peer. * <p> * The resources maintained for the link will be freed up after the given handler has * been invoked. * * @param <T> The type of link. * @param link The link to set the handler on. * @param handler The handler to invoke. * @return The wrapper that has been created around the given handler. * @throws NullPointerException if link or handler are {@code null}. */ public static <T extends ProtonLink<T>> Handler<AsyncResult<T>> setDetachHandler( final ProtonLink<T> link, final Handler<AsyncResult<T>> handler) { Objects.requireNonNull(link); Objects.requireNonNull(handler); final Handler<AsyncResult<T>> wrappedHandler = remoteDetach -> { handler.handle(remoteDetach); link.free(); }; link.detachHandler(wrappedHandler); return wrappedHandler; }
/** * Sets a handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code true} is received from the peer. * <p> * The resources maintained for the link will be freed up after the given handler has * been invoked. * * @param <T> The type of link. * @param link The link to set the handler on. * @param handler The handler to invoke. * @return The wrapper that has been created around the given handler. * @throws NullPointerException if link or handler are {@code null}. */ public static <T extends ProtonLink<T>> Handler<AsyncResult<T>> setCloseHandler( final ProtonLink<T> link, final Handler<AsyncResult<T>> handler) { Objects.requireNonNull(link); Objects.requireNonNull(handler); final Handler<AsyncResult<T>> wrappedHandler = remoteClose -> { handler.handle(remoteClose); link.free(); }; link.closeHandler(wrappedHandler); return wrappedHandler; }
/** * Sets a default handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code true} is received from the peer. * <p> * The default handler sends a <em>detach</em> frame if the link has not been closed * locally already and then frees up the resources maintained for the link by invoking * its <em>free</em> method. * * @param <T> The type of link. * @param link The link to set the handler on. * @throws NullPointerException if link is {@code null}. */ public static <T extends ProtonLink<T>> void setDefaultCloseHandler(final ProtonLink<T> link) { link.closeHandler(remoteClose -> { if (link.isOpen()) { // peer has initiated closing // respond with our detach frame link.close(); } link.free(); }); }
/** * Sets a default handler on a link that is invoked when an AMQP <em>detach</em> frame * with its <em>close</em> property set to {@code true} is received from the peer. * <p> * The default handler sends a <em>detach</em> frame if the link has not been closed * locally already and then frees up the resources maintained for the link by invoking * its <em>free</em> method. * * @param <T> The type of link. * @param link The link to set the handler on. * @throws NullPointerException if link is {@code null}. */ public static <T extends ProtonLink<T>> void setDefaultCloseHandler(final ProtonLink<T> link) { link.closeHandler(remoteClose -> { if (link.isOpen()) { // peer has initiated closing // respond with our detach frame link.close(); } link.free(); }); }
private static void onTimeOut( final ProtonLink<?> link, final ClientConfigProperties clientConfig, final Future<?> result) { if (link.isOpen() && !HonoProtonHelper.isLinkEstablished(link)) { LOG.debug("link establishment timed out after {}ms", clientConfig.getLinkEstablishmentTimeout()); link.close(); link.free(); result.tryFail(new ServerErrorException(HttpsURLConnection.HTTP_UNAVAILABLE)); } }
link.free(); });
link.free(); });