package network;
import java.net.InetAddress;
import java.util.List;
import java.util.logging.Logger;
import database.DBSet;
import settings.Settings;
public class PeerManager {
private static final int DATABASE_PEERS_AMOUNT = 1000;
private static PeerManager instance;
public static PeerManager getInstance()
{
if(instance == null)
{
instance = new PeerManager();
}
return instance;
}
private PeerManager()
{
}
public List<Peer> getKnownPeers()
{
//ASK DATABASE FOR A LIST OF PEERS
List<Peer> knownPeers = DBSet.getInstance().getPeerMap().getKnownPeers(DATABASE_PEERS_AMOUNT);
Logger.getGlobal().info("Peers retrieved from database : " + knownPeers.size());
//IF PEERS LESS THEN DATABASE_PEERS_AMOUNT ALSO LOAD FROM SETTINGS
if(knownPeers.size() < DATABASE_PEERS_AMOUNT)
{
List<Peer> settingsPeers = Settings.getInstance().getKnownPeers();
settingsPeers.addAll(knownPeers);
Logger.getGlobal().info("Peers retrieved after settings : " + settingsPeers.size());
return settingsPeers;
}
//RETURN
return knownPeers;
}
public void addPeer(Peer peer)
{
//NO NEED TO INSERT PEER INTO DATABASE IF IT IS ALREADY IN SETTINGS
for(Peer knownPeer: Settings.getInstance().getKnownPeers())
{
if(knownPeer.getAddress().equals(peer.getAddress()))
{
return;
}
}
//ADD TO DATABASE
DBSet.getInstance().getPeerMap().addPeer(peer);
}
public void blacklistPeer(Peer peer)
{
DBSet.getInstance().getPeerMap().blacklistPeer(peer);
}
public boolean isBlacklisted(InetAddress address)
{
return DBSet.getInstance().getPeerMap().isBlacklisted(address);
}
public boolean isBlacklisted(Peer peer)
{
return DBSet.getInstance().getPeerMap().isBlacklisted(peer.getAddress());
}
}