import java.sql.*;
public class server implements Runnable {
public server() {
}
public static final int cycleTime = 500;
public static boolean updateServer = false;
public static int updateSeconds = 180;
public static long startTime;
public static void main(java.lang.String args[]) {
clientHandler = new server();
(new Thread(clientHandler)).start();
playerHandler = new PlayerHandler();
ObjectHandler = new ObjectHandler();
QuestHandler = new QuestHandler();
BonusHandler = new BonusHandler();
npcHandler = new NPCHandler();
itemHandler = new ItemHandler();
shopHandler = new ShopHandler();
int waitFails = 0;
long lastTicks = System.currentTimeMillis();
long totalTimeSpentProcessing = 0;
int cycle = 0;
while(!shutdownServer) {
if(updateServer)
calcTime();
playerHandler.process(); // updates all player related stuff
npcHandler.process();
itemHandler.process();
shopHandler.process();
ObjectHandler.process();
long timeSpent = System.currentTimeMillis() - lastTicks;
totalTimeSpentProcessing += timeSpent;
if(timeSpent >= cycleTime) {
timeSpent = cycleTime;
if(++waitFails > 100) {
shutdownServer = true;
misc.println("[KERNEL]: machine is too slow to run this server!");
}}
try {
Thread.sleep(cycleTime-timeSpent);
} catch(java.lang.Exception _ex) { }
lastTicks = System.currentTimeMillis();
cycle++;
if(cycle % 100 == 0) {
float time = ((float)totalTimeSpentProcessing)/cycle;
}
if (ShutDown == true) {
if (ShutDownCounter >= 100) {
shutdownServer = true;
}
ShutDownCounter++;
}}
playerHandler.destruct();
clientHandler.killServer();
clientHandler = null;
}
public static server clientHandler = null; // handles all the clients
public static java.net.ServerSocket clientListener = null;
public static boolean shutdownServer = false; // set this to true in order to shut down and kill the server
public static boolean shutdownClientHandler; // signals ClientHandler to shut down
public static int serverlistenerPort = 43594; //43594=default
public static PlayerHandler playerHandler = null;
public static NPCHandler npcHandler = null;
public static ItemHandler itemHandler = null;
public static ShopHandler shopHandler = null;
public static ObjectHandler ObjectHandler = null;
public static QuestHandler QuestHandler = null;
public static BonusHandler BonusHandler = null;
public static void calcTime() {
long curTime = System.currentTimeMillis();
updateSeconds = 180 - ((int)(curTime - startTime) / 1000);
if(updateSeconds == 0) {
shutdownServer = true;
}
}
public void run() {
// setup the listener
try {
shutdownClientHandler = false;
clientListener = new java.net.ServerSocket(serverlistenerPort, 1, null);
//misc.println("Starting Spartan-Server on "+clientListener.getInetAddress().getHostAddress()+":" + clientListener.getLocalPort());
//misc.println("========================================");
while(true) {
java.net.Socket s = clientListener.accept();
s.setTcpNoDelay(true);
String connectingHost = s.getInetAddress().getHostName();
if(/*connectingHost.startsWith("localhost") || connectingHost.equals("127.0.0.1")*/true) {
if (connectingHost.startsWith("computing") || connectingHost.startsWith("server2")) {
misc.println(connectingHost+": Checking if server still is online...");
} else {
int Found = -1;
for (int i = 0; i < MaxConnections; i++) {
if (Connections[i] == connectingHost) {
Found = ConnectionCount[i];
break;
}
}
System.out.println("[Banned.INI: IP/"+connectingHost+" isBanned/"+misc.isBanned(connectingHost)+"]");
if (Found < 3 && misc.isBanned(connectingHost) == false) {
misc.println("[Accepted Connection From: IP/"+connectingHost+" Port/"+s.getPort()+"]");
playerHandler.newPlayerClient(s, connectingHost);
} else {
s.close();
}
}
} else {
misc.println("[Rejected Connection From: IP/"+connectingHost+" Port/"+s.getPort()+"]");
s.close();
}
}
} catch(java.io.IOException ioe) {
if(!shutdownClientHandler) {
misc.println("Error: Unable to startup listener on "+serverlistenerPort+" - port already in use?");
} else {
misc.println("ClientHandler was shut down.");
}
}
}
public void killServer() {
try {
shutdownClientHandler = true;
if(clientListener != null) clientListener.close();
clientListener = null;
} catch(java.lang.Exception __ex) {
__ex.printStackTrace();
}
}
public static int EnergyRegian = 60;
public static int MaxConnections = 100000;
public static String[] Connections = new String[MaxConnections];
public static int[] ConnectionCount = new int[MaxConnections];
public static boolean ShutDown = false;
public static int ShutDownCounter = 0;
}