package org.torrent.internal.peer.connection;
import java.util.LinkedList;
import java.util.Queue;
import org.torrent.internal.protocol.message.BittorrentMessage;
import org.torrent.internal.util.Validator;
public class BufferedReceiver implements BTMessageReceiver {
private final BTMessageReceiver receiver;
private Queue<BittorrentMessage> messageQueue;
public BufferedReceiver(BTMessageReceiver receiver) {
Validator.notNull(receiver, "Receiver is null!");
this.receiver = receiver;
}
@Override
public void received(BittorrentMessage message) {
if (messageQueue == null) {
receiver.received(message);
} else {
messageQueue.add(message);
}
}
public void setEnableBuffering(boolean value) {
if (value) {
if (messageQueue == null) {
messageQueue = new LinkedList<BittorrentMessage>();
}
} else {
messageQueue = null;
}
}
public void flush() {
for (BittorrentMessage m : messageQueue) {
receiver.received(m);
}
messageQueue.clear();
}
}