/** * */ package com.photoshare.pipeline; import java.util.ArrayList; import java.util.LinkedList; import com.photoshare.common.AbstractRequestListener; import com.photoshare.common.RequestParam; import com.photoshare.msg.RequestMsg; /** * @author Aron * */ public class OutboundPipeline { private static OutboundPipeline pipeline = null; public static OutboundPipeline getInstance() { if (pipeline == null) pipeline = new OutboundPipeline(); return pipeline; } private OutboundPipeline() { } private LinkedList<RequestMsg<? extends RequestParam>> MsgQueue = new LinkedList<RequestMsg<? extends RequestParam>>(); public boolean add(RequestMsg<? extends RequestParam> request, final AbstractRequestListener<String> listener) { notifySendToTargetHandler(request, listener); return MsgQueue.add(request); } public void poll() { if (!MsgQueue.peek().isExpired()) { MsgQueue.remove(); } } public interface Listener { public void onFreshMsgBoard(RequestMsg<? extends RequestParam> request, AbstractRequestListener<String> listener); } private ArrayList<Listener> listeners = new ArrayList<Listener>(); public void notifySendToTargetHandler(RequestMsg<? extends RequestParam> request, final AbstractRequestListener<String> listener) { for (Listener lis : listeners) { lis.onFreshMsgBoard(request, listener); } } public void registerListener(Listener listener) { listeners.add(listener); } public void scanAndDiscard() { for (int i = 0; i < MsgQueue.size(); i++) { if (MsgQueue.get(i).isSend()) { MsgQueue.remove(i); i--; } } } public void moveToLast() { if (MsgQueue.isEmpty() || MsgQueue.peek() == null) return; MsgQueue.peek().setExpired(true); MsgQueue.add(MsgQueue.poll()); } }