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 IntegTestClientNotReadListener implements AsyncDataListener {
private static final Logger log = LoggerFactory.getLogger(IntegTestClientNotReadListener.class);
public IntegTestClientNotReadListener() {
}
@Override
public void incomingData(Channel channel, ByteBuffer b) {
log.info("receiving data server..writing now");
CompletableFuture<Channel> future = channel.write(b);
future
.thenAccept(p -> finished("data written", b))
.exceptionally(e -> fail(channel, e));
}
private Void fail(Channel channel, Throwable e) {
log.info("finished exception="+e, e);
if(!channel.isClosed()) {
CompletableFuture<Channel> close = channel.close();
close.thenAccept(p -> {
log.info("Channel closed");
});
}
return null;
}
private void finished(String string, ByteBuffer buffer) {
log.info("writing finished reason="+string);
}
@Override
public void connectionOpened(TCPChannel proxy, boolean isReadyForWrites) {
log.info("connection opened="+proxy+" ready="+isReadyForWrites);
}
@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 unregistering for reads");
channel.unregisterForReads();
}
@Override
public void releaseBackPressure(Channel channel) {
log.info("server registring for reads");
channel.registerForReads();
}
}