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

Last change on this file since 871 was 871, checked in by pharms, 12 years ago
  • added some comments
File size: 2.8 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 is initialized with a port on
12 * which it shall listen, as well as a message listener to forward the received messages to.
13 * Internally it starts a jetty web server with a single {@link HtmlMonitorServlet} to receive
14 * the messages.
15 * </p>
16 *
17 * @author Patrick Harms
18 */
19class HtmlMonitorServer implements HtmlMonitorComponent {
20   
21    /**
22     * the port to listen on
23     */
24    private int port;
25
26    /**
27     * the jetty web server used for receiving messages
28     */
29    private Server server;
30
31    /**
32     * the message listener to forward the messages to
33     */
34    private HtmlMonitorMessageListener messageListener;
35
36    /**
37     * <p>
38     * initializes the server with the port to listen on and the message listener to forward
39     * the messages to.
40     * </p>
41     *
42     * @param port            the port to listen on
43     * @param messageListener the message listener to forward the messages to
44     */
45    HtmlMonitorServer(int port, HtmlMonitorMessageListener messageListener) {
46        this.port = port;
47        this.messageListener = messageListener;
48    }
49
50    /* (non-Javadoc)
51     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#init()
52     */
53    @Override
54    public synchronized void init() {
55        if (server != null) {
56            throw new IllegalStateException("already initialized. First call stop()");
57        }
58
59        server = new Server(port);
60        Context root = new Context(server, "/", Context.SESSIONS);
61
62        HtmlMonitorServlet servlet = new HtmlMonitorServlet(messageListener);
63        ServletHolder servletHolder = new ServletHolder(servlet);
64        root.addServlet(servletHolder, "/*");
65    }
66
67    /* (non-Javadoc)
68     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#start()
69     */
70    @Override
71    public synchronized void start() throws HtmlMonitorException {
72        if (server == null) {
73            throw new IllegalStateException("server not initialized yet. First call init()");
74        }
75       
76        try {
77            server.start();
78        }
79        catch (Exception e) {
80            throw new HtmlMonitorException("could not start server", e);
81        }
82    }
83
84
85    /* (non-Javadoc)
86     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#stop()
87     */
88    @Override
89    public synchronized void stop() {
90        try {
91            if (server != null) {
92                server.stop();
93            }
94        }
95        catch (Exception e) {
96            Console.printerrln("could not stop HTML monitor server: " + e.getMessage());
97            Console.logException(e);
98        }
99    }
100
101}
Note: See TracBrowser for help on using the repository browser.