package ar.com.javacuriosities.nio.server.clients; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import ar.com.javacuriosities.nio.server.message.reader.IMessageReader; import ar.com.javacuriosities.nio.server.message.writer.MessageWriter; /* * Representa al cliente y su channel por el cual podemos * leer y escribir datos */ public class ClientSocket { public long socketId; public SocketChannel socketChannel = null; public IMessageReader messageReader = null; public MessageWriter messageWriter = null; public boolean endOfStreamReached = false; public ClientSocket() { } public ClientSocket(SocketChannel socketChannel) { this.socketChannel = socketChannel; } public int read(ByteBuffer byteBuffer) throws IOException { int bytesRead = this.socketChannel.read(byteBuffer); int totalBytesRead = bytesRead; while(bytesRead > 0){ bytesRead = this.socketChannel.read(byteBuffer); totalBytesRead += bytesRead; } if(bytesRead == -1){ this.endOfStreamReached = true; } return totalBytesRead; } public int write(ByteBuffer byteBuffer) throws IOException{ int bytesWritten = this.socketChannel.write(byteBuffer); int totalBytesWritten = bytesWritten; while(bytesWritten > 0 && byteBuffer.hasRemaining()){ bytesWritten = this.socketChannel.write(byteBuffer); totalBytesWritten += bytesWritten; } return totalBytesWritten; } }