package de.tu_dresden.inf.ggp06_2.connection; import java.io.IOException; import java.util.Properties; import org.apache.log4j.Logger; public class PlayerServer extends NanoHTTPD { /* Stores the logger for this class */ public static Logger logger = Logger.getLogger(PlayerServer.class); /* Stores the player of this server */ Player player; /* Internal used strings */ final static String STR_SERVER_START = "Started a PlayerServer: "; final static String STR_ERROR1 = "Message is empty!"; final static String STR_ERROR2 = "Unknown command "; final static String STR_ERROR3 = "Unknown message state "; public PlayerServer(int port) throws IOException { super(port); player = new Player(); logger.info( STR_SERVER_START + this); } @Override public Response serve( String uri, String method, Properties header, Properties parms, String data ) { try { String response_string = ""; if ( data != null ) { logger.info( "Command: " + data ); // parse message Message message = new Message(data); // switch to correct function switch ( message.type ) { case Message.START: player.commandStart( message ); response_string = "READY"; break; case Message.PLAY: response_string = player.commandPlay( message ); break; case Message.STOP: player.commandStop( message ); response_string = "DONE"; break; case Message.EMPTY: throw( new IllegalArgumentException(STR_ERROR1) ); case Message.ERROR: throw( new IllegalArgumentException(STR_ERROR2 + data) ); default: throw( new IllegalArgumentException(STR_ERROR3 + data) ); } } else { logger.warn( "Empty message received!" ); } logger.info( "Response:" + response_string ); Response response = new Response( Response.HTTP_OK, "text/acl", response_string ); response.addHeader( "Content-Length", "" + response_string.length() ); return response; // error handling } catch ( IllegalArgumentException ex ) { logger.error("IllegalArgumentException:", ex); return new Response( Response.HTTP_BADREQUEST, "text/acl", "NIL" ); } } /** * wait for server thread to exit * */ public void waitForExit(){ try { server_thread.join(); } catch (Exception ex) { logger.error( "", ex ); } } /** * starts the game player and waits for messages from the game master <br> * Command line options: [port] */ public static void main(String[] args){ try { int port = 4001; if ( args.length >= 1 ) { port=Integer.parseInt(args[0]); } PlayerServer server = new PlayerServer(port); server.waitForExit(); } catch (IOException ex) { ex.printStackTrace(); System.exit(-1); } } }