annotate src/WebSocketServer.java @ 2:d5d2ca53a832

dealed dispose of connection close
author kazz
date Sat, 22 Jan 2011 05:30:20 +0900
parents 5a50d4b48bf9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 import java.io.IOException;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 import java.net.InetSocketAddress;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.nio.channels.SelectionKey;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import java.nio.channels.Selector;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 import java.nio.channels.ServerSocketChannel;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 public class WebSocketServer {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 public static int port;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 private ServerSocketChannel ssChannel;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 private Selector selector;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 private boolean running = true;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 public WebSocketServer(int port) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 this.port = port;
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 try {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 ssChannel = ServerSocketChannel.open();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 ssChannel.socket().bind(new InetSocketAddress(port));
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 ssChannel.configureBlocking(false);
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 selector = Selector.open();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ssChannel.register(selector, SelectionKey.OP_ACCEPT, new AcceptHandler());
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 } catch (IOException e) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 System.out.println("Can't open ServerSocketChannel.");
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 e.printStackTrace();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 public void mainLoop() {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 while (running) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 try {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 int keyCount = selector.select(0);
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 for (SelectionKey key : selector.selectedKeys()) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 Handler handler = (Handler) key.attachment();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 handler.handle(key);
2
d5d2ca53a832 dealed dispose of connection close
kazz
parents: 0
diff changeset
35 // selector.selectedKeys().remove(key);
0
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 }
2
d5d2ca53a832 dealed dispose of connection close
kazz
parents: 0
diff changeset
37 selector.selectedKeys().clear();
0
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 } catch (IOException e) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 e.printStackTrace();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 /**
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 * @param args
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 */
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 public static void main(String[] args) {
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 WebSocketServer wsServer = new WebSocketServer(11000);
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 wsServer.mainLoop();
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }