Package de.creepsmash.server

Source Code of de.creepsmash.server.WebserverManager

/**
   Creep Smash, a multiplayer towerdefence game
   created as a project at the Hochschule fuer
   Technik Stuttgart (University of Applied Science)
   http://www.hft-stuttgart.de
  
   Copyright (C) 2008 by     
    * Andreas Wittig
    * Bernd Hietler
    * Christoph Fritz
    * Fabian Kessel
    * Levin Fritz
    * Nikolaj Langner
    * Philipp Schulte-Hubbert
    * Robert Rapczynski
    * Ron Trautsch
    * Sven Supper
    http://creepsmash.sf.net/

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
**/


package de.creepsmash.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.BindException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.Request;
import org.mortbay.jetty.handler.AbstractHandler;

/**
* Manager for the embedded WebServer.
*
* @author andreas
*
*/
public class WebserverManager {

  private static Logger logger = Logger
  .getLogger(WebserverManager.class);
 
  /**
   * Starts the embedded webserver.
   * @param webserverPort the port for the webserver
   * @param hostname the server's hostname.
   * @param gameserverPort the port used for the game server.
   */
  public static void start(final int webserverPort, final String hostname,
      final int gameserverPort) {
    org.mortbay.jetty.Server server = new org.mortbay.jetty.Server(webserverPort);

    final long time = (new Date()).getTime();
   
    Handler handler = new AbstractHandler()  {
     
        public void handle(String target, HttpServletRequest request,
            HttpServletResponse response, int dispatch)
            throws IOException, ServletException   {
         
          //use index.html as default page
          if (target.equals("/")) {
            target = "/index.html";
          }
         
          //mime-type
          if (target.endsWith(".gif")) {
            response.setContentType("image/gif");
          } else if (target.endsWith(".jpeg")
              || target.endsWith(".jpg")) {
            response.setContentType("image/jpeg");
          } else if (target.endsWith(".htm")
              || target.endsWith(".html")) {
            response.setContentType("text/html");
          } else if (target.endsWith(".css")) {
            response.setContentType("text/css");
          } else if (target.endsWith(".jnlp")) {
            response.setContentType("application/x-java-jnlp-file");
          } else if (target.endsWith(".jar")) {
            response.setContentType("application/java-archive");
          }
              
            response.setStatus(HttpServletResponse.SC_OK);
            response.setDateHeader("Date", time);
      response.setDateHeader("Last-Modified",  time);
                        
            InputStream inputStream =
              this.getClass().getResourceAsStream("/htdocs" + target);
                                  
            if (inputStream == null) {
              response.setStatus(HttpServletResponse.SC_NOT_FOUND);
              logger.warn("file not found: /htdocs" + target);
            } else
              if (target.endsWith(".jnlp")) {
                 BufferedReader bufferedReader =
                   new BufferedReader(
                       new InputStreamReader(inputStream));
                 while (bufferedReader.ready()) {
                   String line = bufferedReader.readLine();
                   line = line.replace("HOSTNAME", hostname);
                   line = line.replace(
                       "WEBSERVERPORT",
                       String.valueOf(webserverPort));
                   line = line.replace(
                       "GAMESERVERPORT",
                       String.valueOf(gameserverPort));
                   response.getOutputStream().println(line);
                 }
              } else {
                while (inputStream.available() > 0) {
                  response.getOutputStream().
                  write(inputStream.read());
                }
              }
            }
           
            ((Request) request).setHandled(true);
        }
    };
     
    server.setHandler(handler)
   
    //start webserver
    try {
      server.start();
    } catch (BindException e) {
      logger.error("could not start webserver, "
          + "because port could not be used.");
    } catch (Exception e) {
      logger.error("error while starting webserver");
    }
     
   
  }
 
}
TOP

Related Classes of de.creepsmash.server.WebserverManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.