/** * Author: Timothy Prepscius * License: GPLv3 Affero + keep my name in the code! */ package mail.client; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import core.util.LogNull; import core.util.Pair; public class EventDispatcher extends EventPropagator { static LogNull log = new LogNull(EventDispatcher.class); List> eventQueue = new LinkedList>(); // Collections.synchronizedList(new LinkedList>() // ); Set onced = new HashSet(); public synchronized void prepareForDispatch () { eventQueue.add(null); onced.clear(); } public void dispatchEvents () { prepareForDispatch(); Pair next = null; while ((next = eventQueue.get(0))!=null) { eventQueue.remove(0); doSignal(next.first, next.second); } eventQueue.remove(0); } @Override public void signalOnce (String event, Object...parameters) { log.debug("signalOnce", event); if (onced.contains(event)) return; onced.add(event); signal(event, parameters); } @Override public void signal (String event, Object... parameters) { log.debug("signal",event,parameters); eventQueue.add(new Pair(event, parameters)); } }