import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.rmi.RemoteException; public class BroadcasterImpl implements Broadcaster { private Set listeners = new HashSet(); public synchronized BroadcastReport broadcast(String msg) { Iterator it = listeners.iterator(); int successes = 0; int failures = 0; while (it.hasNext()) { BroadcastListener listener = it.next(); try { listener.handleBroadcast(msg); ++successes; } catch (RemoteException e) { ++failures; System.err.println("removing listener " + listener + ": " + e); it.remove(); } } return new BroadcastReport(successes, failures); } public void addListener(BroadcastListener listener) { listeners.add(listener); } }