BukkitTelnet/src/me/StevenLawson/BukkitTelnet/TelnetServer.java

99 lines
2.5 KiB
Java

package me.StevenLawson.BukkitTelnet;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.UnknownHostException;
import me.StevenLawson.BukkitTelnet.TelnetConfig.SimpleConfigEntries;
public class TelnetServer
{
private SocketListener socketListener;
private TelnetServer()
{
}
public void startServer()
{
// If the server is running, stop it
stopServer();
final SimpleConfigEntries config = TelnetConfig.getInstance().getConfigEntries();
// Server address, optional.
final InetAddress hostAddress;
final String address = config.getAddress();
if (address != null)
{
try
{
hostAddress = InetAddress.getByName(address);
}
catch (UnknownHostException ex)
{
TelnetLogger.severe("Cannot start server - Invalid address: " + config.getAddress());
TelnetLogger.severe(ex);
return;
}
}
else
{
hostAddress = null;
}
// Server socket
final ServerSocket serversocket;
try
{
if (hostAddress == null)
{
serversocket = new ServerSocket(config.getPort());
}
else
{
serversocket = new ServerSocket(config.getPort(), 50, hostAddress);
}
}
catch (IOException ex)
{
TelnetLogger.severe("Cannot start server - " + "Cant bind to " + (hostAddress == null ? "*" : hostAddress) + ":" + config.getPort());
TelnetLogger.severe(ex);
return;
}
socketListener = new SocketListener(serversocket);
socketListener.start();
final String host = serversocket.getInetAddress().getHostAddress().replace("0.0.0.0", "*");
TelnetLogger.info("Server started on " + host + ":" + serversocket.getLocalPort());
}
public void stopServer()
{
if (socketListener == null)
{
return;
}
socketListener.stopServer();
}
public SocketListener getSocketListener()
{
return socketListener;
}
public static TelnetServer getInstance()
{
return TelnetServerHolder.INSTANCE;
}
private static class TelnetServerHolder
{
private static final TelnetServer INSTANCE = new TelnetServer();
}
}