source: trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorServer.java @ 879

Last change on this file since 879 was 879, checked in by pharms, 12 years ago
  • changed implementation so that java script is served by server itself and that it determines the servers location through its own URL
File size: 3.4 KB
Line 
1package de.ugoe.cs.autoquest.htmlmonitor;
2
3import org.mortbay.jetty.Server;
4import org.mortbay.jetty.servlet.Context;
5import org.mortbay.jetty.servlet.ServletHolder;
6
7import de.ugoe.cs.util.console.Console;
8
9/**
10 * <p>
11 * this is the web server, that receives the client messages. It also provides the java script
12 * that is used by the client via the URL /script/autoquest-htmlmonitor.js. It is initialized
13 * with a port on which it shall listen, as well as a message listener to forward the received
14 * messages to. Internally it starts a jetty web server with a single {@link HtmlMonitorServlet}
15 * to receive the messages as well as a .
16 * </p>
17 *
18 * @author Patrick Harms
19 */
20class HtmlMonitorServer implements HtmlMonitorComponent {
21   
22    /**
23     * the port to listen on
24     */
25    private int port;
26
27    /**
28     * the jetty web server used for receiving messages
29     */
30    private Server server;
31
32    /**
33     * the message listener to forward the messages to
34     */
35    private HtmlMonitorMessageListener messageListener;
36
37    /**
38     * <p>
39     * initializes the server with the port to listen on and the message listener to forward
40     * the messages to.
41     * </p>
42     *
43     * @param port            the port to listen on
44     * @param messageListener the message listener to forward the messages to
45     */
46    HtmlMonitorServer(int port, HtmlMonitorMessageListener messageListener) {
47        this.port = port;
48        this.messageListener = messageListener;
49    }
50
51    /* (non-Javadoc)
52     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#init()
53     */
54    @Override
55    public synchronized void init() {
56        if (server != null) {
57            throw new IllegalStateException("already initialized. First call stop()");
58        }
59
60        server = new Server(port);
61       
62        /*
63        // the following code can be used to support SSL directly
64        server = new Server();
65       
66        SslSocketConnector connector = new SslSocketConnector();
67        connector.setPort(port);
68        connector.setKeystore("data/keystore");
69        connector.setPassword("123456");
70        connector.setKeyPassword("123456");
71        connector.setTruststore("data/keystore");
72        connector.setTrustPassword("123456");
73        server.addConnector(connector);*/
74
75        Context root = new Context(server, "/", Context.SESSIONS);
76
77        HtmlMonitorServlet servlet = new HtmlMonitorServlet(messageListener);
78        ServletHolder servletHolder = new ServletHolder(servlet);
79        root.addServlet(servletHolder, "/*");
80    }
81
82    /* (non-Javadoc)
83     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#start()
84     */
85    @Override
86    public synchronized void start() throws HtmlMonitorException {
87        if (server == null) {
88            throw new IllegalStateException("server not initialized yet. First call init()");
89        }
90       
91        try {
92            server.start();
93        }
94        catch (Exception e) {
95            throw new HtmlMonitorException("could not start server", e);
96        }
97    }
98
99
100    /* (non-Javadoc)
101     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#stop()
102     */
103    @Override
104    public synchronized void stop() {
105        try {
106            if (server != null) {
107                server.stop();
108            }
109        }
110        catch (Exception e) {
111            Console.printerrln("could not stop HTML monitor server: " + e.getMessage());
112            Console.logException(e);
113        }
114    }
115
116}
Note: See TracBrowser for help on using the repository browser.