package org.webpieces.nio.api.integ; import java.nio.ByteBuffer; import java.util.concurrent.CompletableFuture; import org.webpieces.nio.api.channels.Channel; import org.webpieces.nio.api.channels.TCPChannel; import org.webpieces.nio.api.handlers.AsyncDataListener; import org.webpieces.util.logging.Logger; import org.webpieces.util.logging.LoggerFactory; public class IntegTestLocalhostServerListener implements AsyncDataListener { private static final Logger log = LoggerFactory.getLogger(IntegTestLocalhostServerListener.class); public IntegTestLocalhostServerListener() { } @Override public void incomingData(Channel channel, ByteBuffer b) { CompletableFuture<Channel> future = channel.write(b); future .thenAccept(p -> finished("data written", b)) .whenComplete((r, e) -> fail(channel, b, r, e)); } private void finished(String string, ByteBuffer buffer) { } private void fail(Channel channel, ByteBuffer b, Void r, Throwable e) { if(e != null) { log.info("finished exception="+e, e); channel.close(); } } @Override public void connectionOpened(TCPChannel proxy, boolean isReadyForWrites) { log.info("opened connection="+proxy); } @Override public void farEndClosed(Channel channel) { log.info("far end closed="+channel); } @Override public void failure(Channel channel, ByteBuffer data, Exception e) { log.info("failure on processing", e); } @Override public void applyBackPressure(Channel channel) { //log.info("server apply backpressure"); channel.unregisterForReads().thenAccept(c -> logIt()); } private void logIt() { //log.info("UNregistereD for reads"); } @Override public void releaseBackPressure(Channel channel) { //log.info("server releasing backpressure"); channel.registerForReads().thenAccept(c -> logMe()); } private void logMe() { //log.info("registereD for reads"); } }