package network;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Logger;
import settings.Settings;
public class ConnectionAcceptor extends Thread{
private ConnectionCallback callback;
private ServerSocket socket;
public ConnectionAcceptor(ConnectionCallback callback)
{
this.callback = callback;
}
public void run()
{
while(true)
{
try
{
if(socket == null)
{
//START LISTENING
socket = new ServerSocket(Network.PORT);
}
//CHECK IF WE HAVE MAX CONNECTIONS CONNECTIONS
if(Settings.getInstance().getMaxConnections() <= callback.getActiveConnections().size())
{
//IF SOCKET IS OPEN CLOSE IT
if(!socket.isClosed())
{
socket.close();
}
Thread.sleep(100);
}
else
{
//REOPEN SOCKET
if(socket.isClosed())
{
socket = new ServerSocket(Network.PORT);
}
//ACCEPT CONNECTION
Socket connectionSocket = socket.accept();
//CHECK IF SOCKET IS NOT LOCALHOST || WE ARE ALREADY CONNECTED TO THAT SOCKET || BLACKLISTED
if(/*connectionSocket.getInetAddress().isSiteLocalAddress() || connectionSocket.getInetAddress().isAnyLocalAddress() || connectionSocket.getInetAddress().isLoopbackAddress() ||*/ callback.isConnectedTo(connectionSocket.getInetAddress()) || PeerManager.getInstance().isBlacklisted(connectionSocket.getInetAddress()))
{
//DO NOT CONNECT TO OURSELF/EXISTING CONNECTION
connectionSocket.close();
}
else
{
//CREATE PEER
new Peer(callback, connectionSocket);
}
}
}
catch(Exception e)
{
e.printStackTrace();
Logger.getGlobal().warning("Error accepting new connection");
}
}
}
}