annotate src/rep/channel/REPServerSocketChannel.java @ 193:3133040ee4f4

(no commit message)
author one
date Wed, 31 Dec 2008 15:06:22 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
193
3133040ee4f4 (no commit message)
one
parents:
diff changeset
1 package rep.channel;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
2
3133040ee4f4 (no commit message)
one
parents:
diff changeset
3 import java.io.IOException;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
4 import java.net.ServerSocket;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
5 import java.nio.channels.ClosedChannelException;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
6 import java.nio.channels.SelectableChannel;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
7 import java.nio.channels.SelectionKey;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
8 import java.nio.channels.Selector;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
9 import java.nio.channels.ServerSocketChannel;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
10 import java.nio.channels.SocketChannel;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
11 import java.nio.channels.spi.SelectorProvider;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
12
3133040ee4f4 (no commit message)
one
parents:
diff changeset
13 /*
3133040ee4f4 (no commit message)
one
parents:
diff changeset
14 * シミュレーションでは inheritance のServerChannelSimulator を生成、
3133040ee4f4 (no commit message)
one
parents:
diff changeset
15 * リアルコミュニケーションでは 自身を生成、内部にもつ ServerSocketChannelを扱う
3133040ee4f4 (no commit message)
one
parents:
diff changeset
16 */
3133040ee4f4 (no commit message)
one
parents:
diff changeset
17 public class REPServerSocketChannel<P> extends SelectableChannel {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
18
3133040ee4f4 (no commit message)
one
parents:
diff changeset
19 public static boolean isSimulation=false;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
20 private ServerSocketChannel ssc;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
21 private REPPack<P> packer;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
22
3133040ee4f4 (no commit message)
one
parents:
diff changeset
23 public REPServerSocketChannel() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
24
3133040ee4f4 (no commit message)
one
parents:
diff changeset
25 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
26
3133040ee4f4 (no commit message)
one
parents:
diff changeset
27 public static <T> REPServerSocketChannel<T> open(REPPack<T> packer) throws IOException{
3133040ee4f4 (no commit message)
one
parents:
diff changeset
28 if(isSimulation){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
29 return new ServerChannelSimulator<T>();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
30 }else{
3133040ee4f4 (no commit message)
one
parents:
diff changeset
31 return new REPServerSocketChannel<T>(ServerSocketChannel.open(), packer);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
32 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
33 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
34
3133040ee4f4 (no commit message)
one
parents:
diff changeset
35 public static <T> REPServerSocketChannel<T> open(SelectableChannel c,REPPack<T> packer) throws IOException{
3133040ee4f4 (no commit message)
one
parents:
diff changeset
36 assert(!isSimulation);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
37 return new REPServerSocketChannel<T>((ServerSocketChannel)c, packer);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
38 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
39
3133040ee4f4 (no commit message)
one
parents:
diff changeset
40 public REPServerSocketChannel(ServerSocketChannel open, REPPack<P> packer) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
41 ssc = open;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
42 this.packer = packer;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
43 REPSocketChannel.addChannel(ssc,this);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
44 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
45
3133040ee4f4 (no commit message)
one
parents:
diff changeset
46 public void close1() throws IOException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
47 REPSocketChannel.removeChannel(ssc);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
48 ssc.close();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
49 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
50
3133040ee4f4 (no commit message)
one
parents:
diff changeset
51 public REPServerSocketChannel(SelectableChannel channel, REPPack<P> packer) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
52 this.ssc = (ServerSocketChannel)channel;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
53 this.packer = packer;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
54 REPSocketChannel.addChannel(ssc,this);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
55 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
56
3133040ee4f4 (no commit message)
one
parents:
diff changeset
57 public REPSocketChannel<P> accept1() throws IOException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
58 return new REPSocketChannel<P>(ssc.accept(), packer);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
59 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
60
3133040ee4f4 (no commit message)
one
parents:
diff changeset
61 public SelectionKey register(REPSelector<P> sel, int ops, Object att) throws ClosedChannelException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
62 assert(!isSimulation);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
63 if(sel!=null)
3133040ee4f4 (no commit message)
one
parents:
diff changeset
64 return sel.register(ssc, ops, att);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
65 else
3133040ee4f4 (no commit message)
one
parents:
diff changeset
66 return null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
67 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
68
3133040ee4f4 (no commit message)
one
parents:
diff changeset
69 public SocketChannel accept() throws IOException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
70 return accept1().sc;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
71 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
72
3133040ee4f4 (no commit message)
one
parents:
diff changeset
73
3133040ee4f4 (no commit message)
one
parents:
diff changeset
74 public ServerSocket socket() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
75 return ssc.socket();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
76 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
77
3133040ee4f4 (no commit message)
one
parents:
diff changeset
78 public SelectableChannel configureBlocking(boolean block) throws IOException
3133040ee4f4 (no commit message)
one
parents:
diff changeset
79 {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
80 ssc.configureBlocking(block);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
81 return this;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
82 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
83
3133040ee4f4 (no commit message)
one
parents:
diff changeset
84 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
85 public Object blockingLock() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
86 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
87 return null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
88 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
89
3133040ee4f4 (no commit message)
one
parents:
diff changeset
90 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
91 public boolean isBlocking() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
92 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
93 return false;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
94 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
95
3133040ee4f4 (no commit message)
one
parents:
diff changeset
96 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
97 public boolean isRegistered() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
98 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
99 return false;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
100 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
101
3133040ee4f4 (no commit message)
one
parents:
diff changeset
102 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
103 public SelectionKey keyFor(Selector sel) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
104 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
105 return null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
106 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
107
3133040ee4f4 (no commit message)
one
parents:
diff changeset
108 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
109 public SelectorProvider provider() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
110 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
111 return null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
112 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
113
3133040ee4f4 (no commit message)
one
parents:
diff changeset
114 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
115 public SelectionKey register(Selector sel, int ops, Object att)
3133040ee4f4 (no commit message)
one
parents:
diff changeset
116 throws ClosedChannelException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
117 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
118 return null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
119 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
120
3133040ee4f4 (no commit message)
one
parents:
diff changeset
121 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
122 public int validOps() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
123 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
124 return 0;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
125 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
126
3133040ee4f4 (no commit message)
one
parents:
diff changeset
127 @Override
3133040ee4f4 (no commit message)
one
parents:
diff changeset
128 protected void implCloseChannel() throws IOException {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
129 // TODO Auto-generated method stub
3133040ee4f4 (no commit message)
one
parents:
diff changeset
130
3133040ee4f4 (no commit message)
one
parents:
diff changeset
131 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
132
3133040ee4f4 (no commit message)
one
parents:
diff changeset
133
3133040ee4f4 (no commit message)
one
parents:
diff changeset
134 }