/** * 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 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; }