-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServerDriver.java
More file actions
executable file
·97 lines (75 loc) · 3.14 KB
/
ServerDriver.java
File metadata and controls
executable file
·97 lines (75 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/**
* Driver for WebServer class
*/
import java.io.*;
import java.util.*;
import java.util.logging.*;
public class ServerDriver {
private static final Logger logger = Logger.getLogger("WebServer"); // global logger
private static final int TERM_WAIT_TIME = 10000; // wait for server process to terminate (milli-seconds)
public static void main(String[] args) {
// parse command line args
HashMap<String, String> params = parseCommandLine(args);
// set the parameters
int serverPort = Integer.parseInt( params.getOrDefault("-p", "2025") ); // server port number
int conTimeout = Integer.parseInt( params.getOrDefault("-t", "0") ); // idle connection timeout in milli-seconds, 0 means infinity
String rootDir = params.getOrDefault("-r", System.getProperty("user.dir")); // root directory of the web server, default is current directory
Level logLevel = Level.parse( params.getOrDefault("-v", "all").toUpperCase() ); // log levels: all, info, off
// standard output
setLogLevel(logLevel);
System.out.println("log level is set to " + logLevel);
System.out.println("starting the server on port " + serverPort);
System.out.println("root directory set to " + rootDir);
WebServer server = new WebServer(serverPort, rootDir, conTimeout);
// start the server
server.start();
System.out.println("server started, type \"quit\" to stop");
System.out.println(".....................................");
// wait for quit command
waitForQuit(server);
try {
// shutdown the server
System.out.println();
System.out.println("server is shutting down...");
server.shutdown();
server.join(TERM_WAIT_TIME);
System.out.println("server stopped");
} catch (InterruptedException e) {
// Ok, ignore
System.out.println("server did not shutdown properly");
}
System.exit(0);
}
// wait until user types "quit" or server terminates
private static void waitForQuit(Thread server) {
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
try {
while (server.isAlive()) {
// to avoid blocking on input
if (console.ready())
if (console.readLine().equals("quit")) break;
}
} catch (IOException e) {
// Ok, ignore
}
}
// parse command line arguments
private static HashMap<String, String> parseCommandLine(String[] args) {
HashMap<String, String> params = new HashMap<String, String>();
int i = 0;
while ((i + 1) < args.length) {
params.put(args[i], args[i+1]);
i += 2;
}
return params;
}
// set the global log level and format
private static void setLogLevel(Level level) {
System.setProperty("java.util.logging.SimpleFormatter.format", "%5$s %n");
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(level);
logger.addHandler(handler);
logger.setLevel(level);
logger.setUseParentHandlers(false);
}
}