Mercurial Hosting > luan
annotate src/luan/webserver/Server.java @ 1142:0f59eab45f3d
webserver - threading
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 30 Jan 2018 18:02:47 -0700 |
parents | 4189027691b7 |
children | d6d0bd05ad8c |
rev | line source |
---|---|
1137 | 1 package luan.webserver; |
2 | |
3 import java.io.IOException; | |
4 import java.net.Socket; | |
5 import java.net.ServerSocket; | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
6 import java.util.concurrent.ExecutorService; |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
7 import java.util.concurrent.Executors; |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
8 import java.util.concurrent.TimeUnit; |
1137 | 9 import org.slf4j.Logger; |
10 import org.slf4j.LoggerFactory; | |
11 | |
12 | |
13 public class Server { | |
14 private static final Logger logger = LoggerFactory.getLogger(Server.class); | |
15 | |
16 public final int port; | |
17 public final Handler handler; | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
18 private static final ExecutorService exec = Executors.newCachedThreadPool(); |
1137 | 19 |
20 public Server(int port,Handler handler) { | |
21 this.port = port; | |
22 this.handler = handler; | |
23 } | |
24 | |
25 protected ServerSocket newServerSocket() throws IOException { | |
26 return new ServerSocket(port); | |
27 } | |
28 | |
29 public synchronized void start() throws IOException { | |
30 final ServerSocket ss = newServerSocket(); | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
31 exec.execute(new Runnable(){public void run() { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
32 try { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
33 while(!exec.isShutdown()) { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
34 final Socket socket = ss.accept(); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
35 exec.execute(new Runnable(){public void run() { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
36 Connection.handle(Server.this,socket); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
37 }}); |
1137 | 38 } |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
39 } catch(IOException e) { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
40 logger.error("",e); |
1137 | 41 } |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
42 }}); |
1137 | 43 logger.info("started server on port "+port); |
44 } | |
45 | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
46 public synchronized boolean stop(long timeoutSeconds) { |
1137 | 47 try { |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
48 exec.shutdownNow(); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
49 boolean stopped = exec.awaitTermination(timeoutSeconds,TimeUnit.SECONDS); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
50 if(stopped) |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
51 logger.info("stopped server on port "+port); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
52 else |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
53 logger.warn("couldn't stop server on port "+port); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
54 return stopped; |
1137 | 55 } catch(InterruptedException e) { |
56 throw new RuntimeException(e); | |
57 } | |
58 } | |
59 | |
60 } |