I think this is good.

Just some ideas to simplify the wording.

    * <p> After a Close message has been received, the implementation will
    * close the connection automatically. However, the client may finish
    * sending the current sequence of partially sent message parts, if any.
    * To facilitate this, the WebSocket implementation will only
    * attempt to close the connection at the earliest of, either the
    * completion of the returned {@code CompletionStage} or the last part
    * of the current message has been sent.

Otherwise, the simplifications are welcome.

-Chris.

> On 17 Jun 2016, at 16:15, Pavel Rappo <pavel.ra...@oracle.com> wrote:
> 
> Hi,
> 
> Could you please [*] review the following change for the upcoming JDK-8159053?
> This change addresses:
> 
> 1. Listener.onClose/onPing behaviour, making the implementation fully*
> responsible of protocol compliance. So reactions on onClose/onPing cannot be
> overridden/redefined in a Listener
> 
> 2. Simpler representation of the Close message.
> 
 ….
> 
>    /**
>     * Receives a Close message.
>     *
>     * …..
>     *
>     * <p> After a Close message has been received, the implementation will
>     * close the connection automatically. However, the client may finish
>     * sending the current sequence of partially sent message parts, if any.
>     * To facilitate this, the WebSocket implementation will only
>     * attempt to close the connection at the earliest of, either the
>     * completion of the returned {@code CompletionStage} or the last part
>     * of the current message has been sent.
>     *
>     * @implSpec The default implementation behaves as if:
>     *
>     * <pre>{@code
>     *     return CompletableFuture.completedStage(null);
>     * }</pre>
>     *
>     * @param webSocket
>     *         the WebSocket
>     * @param statusCode
>     *         the status code
>     * @param reason
>     *         the reason
>     *
>     * @return a CompletionStage that when completed will trigger closing of
>     * the WebSocket
>     */
>    default CompletionStage<?> onClose(WebSocket webSocket,
>                                       int statusCode,
>                                       String reason) {
>        return null;
>    }
> 
>    /**
>     * Sends a Close message with the given status code and the reason.
>     *
>     * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
>     * normally when the message has been sent or completes exceptionally if an
>     * error occurs.
>     *
>     * <p> The {@code statusCode} is an integer in the range {@code 1000 <= 
> code
>     * <= 4999}, except for {@code 1004}, {@code 1005}, {@code 1006} and {@code
>     * 1015}. The {@code reason} is a short string that must have an UTF-8
>     * representation not longer than {@code 123} bytes.
>     *
>     * <p> For more information about status codes see
>     * <a href="https://tools.ietf.org/html/rfc6455#section-7.4";>RFC 6455, 
> 7.4. Status Codes</a>.)
>     *
>     * <p> If a Close message has been already sent or the {@code WebSocket} is
>     * closed, then invoking this method has no effect and returned {@code
>     * CompletableFuture} completes normally.
>     *
>     * <p> The returned {@code CompletableFuture} can complete exceptionally
>     * with:
>     * <ul>
>     * <li> {@link IOException}
>     *          if an I/O error occurs during this operation
>     * </ul>
>     *
>     * @param statusCode
>     *         the status code
>     * @param reason
>     *         the reason
>     *
>     * @return a CompletableFuture with this WebSocket
>     *
>     * @throws IllegalArgumentException
>     *         if the {@code statusCode} has an illegal value, or
>     *         {@code reason} doesn't have an UTF-8 representation not longer
>     *         than {@code 123} bytes
>     *
>     * @see #sendClose()
>     */
>    CompletableFuture<WebSocket> sendClose(int statusCode, String reason);
> 
>    /**
>     * Sends an empty Close message.
>     *
>     * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
>     * normally when the message has been sent or completes exceptionally if an
>     * error occurs.
>     *
>     * <p> If a Close message has been already sent or the {@code WebSocket} is
>     * closed, then invoking this method has no effect and returned {@code
>     * CompletableFuture} completes normally.
>     *
>     * <p> The returned {@code CompletableFuture} can complete exceptionally
>     * with:
>     * <ul>
>     * <li> {@link IOException}
>     *          if an I/O error occurs during this operation
>     * </ul>
>     *
>     * @return a CompletableFuture with this WebSocket
>     */
>    CompletableFuture<WebSocket> sendClose();
> 
> Thanks,
> -Pavel
> 
> --------------------------------------------------------------------------------
> [1] Please excuse me for not publishing this in a form of a webrev. The reason
> is that currently there are too many outstanding changes in the queue that 
> would
> simply obscure the review.

Reply via email to