package ibis.ipl.registry.central.client; import ibis.ipl.registry.central.Member; import ibis.util.ThreadPool; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Gossiper implements Runnable { private static final Logger logger = LoggerFactory.getLogger(Gossiper.class); private final CommunicationHandler commHandler; private final Pool pool; private final long gossipInterval; Gossiper(CommunicationHandler commHandler, Pool pool, long gossipInterval) { this.commHandler = commHandler; this.pool = pool; this.gossipInterval = gossipInterval; ThreadPool.createNew(this, "gossiper"); } public void run() { while (!pool.isStopped()) { Member member = pool.getRandomMember(); if (member != null) { logger.debug("gossiping with " + member); try { commHandler.gossip(member.getIbis()); } catch (IOException e) { logger.warn("could not gossip with " + member); } if (logger.isDebugEnabled()) { logger.debug("Event time at " + commHandler.getIdentifier().getID() + " now " + pool.getTime()); } } synchronized (this) { try { wait((int) (Math.random() * gossipInterval * 2)); } catch (InterruptedException e) { // IGNORE } } } } }