All pastes #776129 Raw Edit

Untitled

public text v1 · immutable
·published 2007-11-15 21:51 UTC
rendered paste body
package main.server;

import java.net.*;
import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;

import main.scripting.*;
import main.gui.*;

public class server implements Runnable {

	// TODO: yet to figure out proper value for timing, but 500 seems good
	public static final int cycleTime = 500;
	public static WorldObjectHandler worldObjectHandler;
	
	public server()
	{
		clientHandler = this;
		(new Thread(clientHandler)).start();			// launch server listener

		playerHandler = new PlayerHandler();
		worldObjectHandler = new WorldObjectHandler();
		//new GuiFrame();

		int waitFails = 0;
		long lastTicks = System.currentTimeMillis();
		long totalTimeSpentProcessing = 0;
		int cycle = 0;
		while(!shutdownServer) {
			playerHandler.process();
			worldObjectHandler.process();

			long timeSpent = System.currentTimeMillis()-lastTicks;
			totalTimeSpentProcessing += timeSpent;
			if(timeSpent >= cycleTime) {
				timeSpent = cycleTime;
				if(++waitFails > 100) {
					shutdownServer = true;
					log("[KERNEL]: machine is too slow to run this server!");
				}
			}

			try { 
				Thread.sleep(cycleTime-timeSpent); 
			} catch(Exception e) { }
			lastTicks = System.currentTimeMillis();
			cycle ++;
			if(cycle % 100 == 0) {
				float time = ((float)totalTimeSpentProcessing)/cycle;
			}
		}

		playerHandler.destruct();
		clientHandler.killServer();
		clientHandler = null;
	}

	public static server clientHandler = null;			// handles all the clients
	public static 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 void run() {
		try {
			shutdownClientHandler = false;
			clientListener = new ServerSocket(serverlistenerPort, 1, null);
			while(true) {
				Socket s = clientListener.accept();
				s.setTcpNoDelay(true);
				String connectingHost = s.getInetAddress().getHostName();
				if(true) {
					log("ClientHandler - Accepted from "+ connectingHost +":"+ s.getPort());
					playerHandler.newPlayerClient(s, connectingHost);
				}
				else {
					log("ClientHandler - Rejected "+ connectingHost +":"+ s.getPort());
					s.close();
				}
			}
		} catch(IOException ioe) {
			if(!shutdownClientHandler)
				log("Error: Unable to startup listener on "+ serverlistenerPort +" - port already in use?");
			else 
				log("ClientHandler was shut down.");
		}
	}

	public void killServer()
	{
		try {
			shutdownClientHandler = true;
			if(clientListener != null) clientListener.close();
			clientListener = null;
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void sleep(int i) {
		try {
			Thread.sleep(i);
		} catch(Exception e) {
			
		}
	}

	public static void log(String str) {
		String time = new SimpleDateFormat("[hh:mm:ss]").format(new Date());
		System.out.println(time +" "+ str);
		//OutputArea.log(time +" "+ str);
	}
}