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;
}
}