package com.limegroup.gnutella;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import org.limewire.io.IpPort;
import org.limewire.io.IpPortSet;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.limegroup.gnutella.messages.Message;
import com.limegroup.gnutella.messages.PingRequestFactory;
@Singleton
public class UniqueHostPinger extends UDPPingerImpl {
/**
* set of endpoints we pinged since last expiration
*/
private final Set<IpPort> _recent = new IpPortSet();
@Inject
public UniqueHostPinger(Provider<MessageRouter> messageRouter,
@Named("backgroundExecutor") ScheduledExecutorService backgroundExecutor,
Provider<UDPService> udpService, PingRequestFactory pingRequestFactory) {
super(messageRouter, backgroundExecutor, udpService, pingRequestFactory);
}
@Override
protected void sendSingleMessage(IpPort host, Message m) {
if (_recent.contains(host))
return;
_recent.add(host);
super.sendSingleMessage(host,m);
}
/**
* clears the list of Endpoints we pinged since the last reset,
* after sending all currently queued messages.
*/
void resetData() {
QUEUE.execute(new Runnable(){
public void run() {
_recent.clear();
}
});
}
}