This repository has been archived on 2021-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
java-nio-server/src/main/java/com/jenkov/nioserver/MessageWriter.java

60 lines
1.7 KiB
Java

package com.jenkov.nioserver;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
/**
* Created by jjenkov on 21-10-2015.
*/
public class MessageWriter implements IMessageWriter {
private List<Message> writeQueue = new ArrayList<>();
private Message messageInProgress = null;
private int bytesWritten = 0;
public MessageWriter() {
}
@Override
public void enqueue(Message message) {
if(this.messageInProgress == null){
this.messageInProgress = message;
System.out.println("Message set as message in progress.");
} else {
this.writeQueue.add(message);
System.out.println("Message enqueued.");
}
//todo register socket for write interest
}
@Override
public void write(Socket socket, ByteBuffer byteBuffer) throws IOException {
System.out.println("Writing message to socket");
byteBuffer.put(this.messageInProgress.sharedArray, this.messageInProgress.offset + this.bytesWritten, this.messageInProgress.length - this.bytesWritten);
byteBuffer.flip();
this.bytesWritten += socket.write(byteBuffer);
byteBuffer.clear();
if(bytesWritten >= this.messageInProgress.length){
if(this.writeQueue.size() > 0){
this.messageInProgress = this.writeQueue.remove(0);
} else {
this.messageInProgress = null;
//todo unregister from selector
}
}
}
@Override
public boolean isEmpty() {
return this.writeQueue.isEmpty() && this.messageInProgress == null;
}
}