package com.limegroup.gnutella.connection; import com.limegroup.gnutella.messages.Message; import com.limegroup.gnutella.util.Buffer; /** * Simple LIFO or FIFO message queue. */ public class SimpleMessageQueue extends AbstractMessageQueue { private Buffer _buf; private boolean _lifo; /** * @param cycle the number of messages to return per cycle, i.e., between * calls to resetCycle. This is used to tweak the ratios of various * message types. * @param timeout the max time to keep queued messages, in milliseconds. * Set this to Integer.MAX_VALUE to avoid timeouts. * @param capacity the maximum number of elements this can store. * @param lifo true if this is last-in-first-out, false if this is * first-in-first-out. */ public SimpleMessageQueue(int cycle, int timeout, int capacity, boolean lifo) { super(cycle, timeout); this._buf=new Buffer(capacity); this._lifo=lifo; } protected Message addInternal(Message m) { return (Message)_buf.addLast(m); } protected Message removeNextInternal() { if (_buf.isEmpty()) return null; if (_lifo) return (Message)_buf.removeLast(); else return (Message)_buf.removeFirst(); } public int size() { return _buf.size(); } }