@Override public long processTimer(long interval) { ArrayList<String> expired = new ArrayList<String>(); for (JiniPeer peer : agent.getPeers().values()) { if (peer.expiredAt() > 0 && System.currentTimeMillis() >= peer.expiredAt()) { expired.add(peer.getEndpoint()); agent.onEvent(JiniEvent.PEER_EXIT, peer.getEndpoint()); } else if (System.currentTimeMillis() >= peer.evasiveAt()) { peer.send(new HeartBeatMsg.Ping(peer.incSequence())); } } if (!expired.isEmpty()) agent.removePeer(expired.toArray(new String[0])); return interval; }