package nodebox.node; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class NodeEventBus { public List> listeners = new CopyOnWriteArrayList>(); public void addListener(NodeEventListener l) { listeners.add(new WeakReference(l)); } public boolean removeListener(NodeEventListener l) { Iterator> it = listeners.iterator(); WeakReference toRemove = null; while (it.hasNext()) { WeakReference ref = it.next(); if (l == ref.get()) { toRemove = ref; break; } } if (toRemove != null) { listeners.remove(toRemove); return true; } return false; } public List getListeners() { List ll = new ArrayList(); for (WeakReference ref : listeners) { NodeEventListener l = ref.get(); if (l != null) ll.add(l); } return ll; } public void send(NodeEvent event) { for (WeakReference ref : listeners) { NodeEventListener l = ref.get(); if (l != null) l.receive(event); } } }