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

41 lines
1.2 KiB
Java

package com.jenkov.nioserver;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
/**
* Project: <strong>java-nio-server</strong><br>
* File: <strong>MessageWriter.java</strong><br>
* Created: <strong>21 Oct 2015</strong><br>
*
* @author jjenkov
*/
public class MessageWriter {
private List<Message> writeQueue = new ArrayList<>();
private Message messageInProgress;
private int bytesWritten;
public void enqueue(Message message) {
if (messageInProgress == null) messageInProgress = message;
else writeQueue.add(message);
}
public void write(Socket socket, ByteBuffer byteBuffer) throws IOException {
byteBuffer.put(messageInProgress.sharedArray, messageInProgress.offset + bytesWritten, messageInProgress.length - bytesWritten);
byteBuffer.flip();
bytesWritten += socket.write(byteBuffer);
byteBuffer.clear();
if (bytesWritten >= messageInProgress.length) {
if (writeQueue.size() > 0) messageInProgress = writeQueue.remove(0);
else messageInProgress = null;
// TODO: unregister from selector
}
}
public boolean isEmpty() { return writeQueue.isEmpty() && messageInProgress == null; }
}