package org.playorm.nio.impl.util; import java.nio.ByteBuffer; import java.util.logging.Level; import java.util.logging.Logger; public class DataChunkImpl implements DataChunkWithBuffer { private static final Logger log = Logger.getLogger(DataChunkImpl.class.getName()); private ByteBuffer data; private ProcessedListener listener = null; private BufferListener bufferListener; private Object id; public DataChunkImpl(Object id, ByteBuffer newBuffer, BufferListener l) { this.data = newBuffer; this.bufferListener = l; this.id = id; } @Override public ByteBuffer getData() { return data; } @Override public void setProcessed(String namedByteConsumerForLogs) { setProcessedImpl(); releaseBuffer(namedByteConsumerForLogs); } public void setProcessedImpl() { if(listener != null) { listener.processed(this); listener = null; } } public void setListener(ProcessedListener l) { this.listener = l; } @Override public void releaseBuffer(String clientName) { if(data != null) { if(data.hasRemaining()) { log.log(Level.WARNING, id+"Discarding unread data("+data.remaining()+") client that didn't consume data="+clientName, new RuntimeException().fillInStackTrace()); } data.clear(); bufferListener.releaseBuffer(data); data = null; } } }