Hi, On Fri, Oct 9, 2015 at 5:07 PM, Paul Sandoz <paul.san...@oracle.com> wrote: > Regarding resource management. This one is tricky. For HTTP Michael had a > clever trick of piggy backing off the back pressure support, but i think that > might be too clever as it is conflating two independent actions. I have a > hunch that to do this effectively we may need some sort of resource supplier > that is registered with the builder. That supplier defines the resource > management strategy and requirements on a listener consuming resources (that > is somewhat annoying because it couples the resource supplier with the > listener). >
I have already proposed this: interface WebSocket void sendText(ByteBuffer text, boolean last, Consumer<Throwable> handler); void sendBinary(ByteBuffer binary, boolean last, Consumer<Throwable> handler); void sendPing(ByteBuffer payload, Consumer<Throwable> handler); void sendPong(ByteBuffer payload, Consumer<Throwable> handler); void close(int code, ByteBuffer reason, Consumer<Throwable> handler); String getSubProtocol(); void request(long); void abort(); CloseState getCloseState(); class Builder Builder listener(Listener l); Builder subProtocols(String... p); CompletableFuture<WebSocket> build(); end interface Listener default void onOpen(WebSocket ws) { ws.request(1); } default void onClose(WebSocket ws, int code, ByteBuffer reason) { } default void onPing(WebSocket ws, ByteBuffer payload) { ws.request(1); } default void onPong(WebSocket ws, ByteBuffer payload) { ws.request(1); } default void onText(WebSocket ws, ByteBuffer text, boolean isLast, Consumer<Throwable> handler) { handler.accept(null); ws.request(1); } default void onBinary(WebSocket ws, ByteBuffer binary, boolean isLast, Consumer<Throwable> handler) { handler.accept(null); ws.request(1); } default void onError(WebSocket ws, Throwable failure) { } end enum CloseState { OPEN, REMOTE, LOCAL, CLOSED, ABORTED } end I hope it gets a second consideration. -- Simone Bordet http://bordet.blogspot.com --- Finally, no matter how good the architecture and design are, to deliver bug-free software with optimal performance and reliability, the implementation technique must be flawless. Victoria Livschitz