annotate rep/channel/SelectionKeySimulator.java @ 205:dfc2afab1325 simulator-nio-both-worked

*** empty log message ***
author kono
date Sat, 30 Aug 2008 11:42:52 +0900
parents 8d7c74610b05
children 3e0cd34d625d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
1 package rep.channel;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
2
194
be219ba8b39c *** empty log message ***
kono
parents: 175
diff changeset
3 import java.io.IOException;
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
4 import java.nio.channels.SelectableChannel;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
5 import java.nio.channels.SelectionKey;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
6 import java.nio.channels.Selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
7
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
8 public class SelectionKeySimulator<P> extends REPSelectionKey<P>{
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
9
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
10 private int interestOpt;
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
11 private SelectableChannel channel;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
12 private int ready;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
13 public Selector selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
14
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
15 public SelectionKeySimulator(SelectableChannel cs, int opt, Selector _selector) {
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
16 super(null);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
17 channel = cs;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
18 interestOpt = opt;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
19 selector = _selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
20 }
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
21 public SelectionKeySimulator(SelectionKey k) {
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
22 super(null);
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
23 channel = k.channel();
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
24 interestOpt = k.interestOps();
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
25 selector = k.selector();
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
26 }
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
27
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
28 public boolean isAble() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
29 if ( (interestOpt&OP_READ)!=0 && isReadable() )
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
30 return true;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
31 else if( (interestOpt&OP_ACCEPT)!=0 && isAcceptable() )
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
32 return true;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
33 else if( (interestOpt&OP_WRITE)!=0 && isWritable() )
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
34 return true;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
35 else
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
36 return false;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
37 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
38
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
39 public void setFlag() {
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
40 SelectableChannelSimulator<?> scs = (SelectableChannelSimulator<?>) channel;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
41 ready = 0;
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
42 if(scs.isAcceptable()) ready |= OP_ACCEPT;
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
43 if(scs.isReadable()) ready |= OP_READ;
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
44 if(scs.isWritable()) ready |= OP_WRITE;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
45 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
46
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
47 public SelectableChannel channel() {
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
48 return channel;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
49 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
50
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
51 public SelectableChannel channel(REPPack<P> packer) {
194
be219ba8b39c *** empty log message ***
kono
parents: 175
diff changeset
52 return channel;
be219ba8b39c *** empty log message ***
kono
parents: 175
diff changeset
53 }
be219ba8b39c *** empty log message ***
kono
parents: 175
diff changeset
54
205
dfc2afab1325 *** empty log message ***
kono
parents: 197
diff changeset
55 @SuppressWarnings("unchecked")
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
56 public REPSocketChannel<P> accept(REPPack<P> pack) throws IOException {
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
57 assert(channel instanceof ServerChannelSimulator);
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
58 ServerChannelSimulator<P> scs = (ServerChannelSimulator<P>) channel;
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
59 return scs.accept1();
194
be219ba8b39c *** empty log message ***
kono
parents: 175
diff changeset
60 }
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
61
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
62 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
63 public void cancel() {
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
64 System.err.println("cancel is not implemented yet.");
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
65 //selector.
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
66 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
67
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
68 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
69 public int interestOps() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
70 return interestOpt;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
71 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
72
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
73 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
74 public SelectionKey interestOps(int ops) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
75 interestOpt = ops;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
76 return this;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
77 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
78
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
79 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
80 public boolean isValid() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
81 return true;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
82 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
83
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
84
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
85 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
86 public Selector selector() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
87 return selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
88 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
89
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
90 @Override
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
91 public int readyOps() {
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
92 int ops=0;
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
93 //if ( channel instanceof SelectableChannelSimulator){
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
94 if ( channel instanceof ServerChannelSimulator ){
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
95 ServerChannelSimulator<?> scs = (ServerChannelSimulator<?>) channel;
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
96 ops = ( OP_ACCEPT * (scs.isAcceptable()? 1:0) );
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
97 }
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
98 if ( channel instanceof ChannelSimulator ){
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
99 ChannelSimulator<?> scs = (ChannelSimulator<?>) channel;
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
100 ops = ( OP_READ * (scs.isReadable()? 1:0) )
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
101 | ( OP_WRITE * (scs.isWritable()? 1:0) );
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
102 // (OP_READ & true) がつかえないらしい.
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
103 }
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
104 return ops;
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
105 }
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
106
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
107 }