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

Last change on this file since 874 was 874, checked in by pharms, 12 years ago
  • added example code for HTTPS
File size: 3.3 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       
61        /*
62        // the following code can be used to support SSL directly
63        server = new Server();
64       
65        SslSocketConnector connector = new SslSocketConnector();
66        connector.setPort(port);
67        connector.setKeystore("data/keystore");
68        connector.setPassword("123456");
69        connector.setKeyPassword("123456");
70        connector.setTruststore("data/keystore");
71        connector.setTrustPassword("123456");
72        server.addConnector(connector);*/
73
74        Context root = new Context(server, "/", Context.SESSIONS);
75
76        HtmlMonitorServlet servlet = new HtmlMonitorServlet(messageListener);
77        ServletHolder servletHolder = new ServletHolder(servlet);
78        root.addServlet(servletHolder, "/*");
79    }
80
81    /* (non-Javadoc)
82     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#start()
83     */
84    @Override
85    public synchronized void start() throws HtmlMonitorException {
86        if (server == null) {
87            throw new IllegalStateException("server not initialized yet. First call init()");
88        }
89       
90        try {
91            server.start();
92        }
93        catch (Exception e) {
94            throw new HtmlMonitorException("could not start server", e);
95        }
96    }
97
98
99    /* (non-Javadoc)
100     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#stop()
101     */
102    @Override
103    public synchronized void stop() {
104        try {
105            if (server != null) {
106                server.stop();
107            }
108        }
109        catch (Exception e) {
110            Console.printerrln("could not stop HTML monitor server: " + e.getMessage());
111            Console.logException(e);
112        }
113    }
114
115}
Note: See TracBrowser for help on using the repository browser.