annotate rep/channel/REPSelector.java @ 287:1ff8bfc0a99a test-editor

*** empty log message ***
author kono
date Sun, 28 Sep 2008 15:46:36 +0900
parents 168dd841be51
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
1 package rep.channel;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
2
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
3 import java.io.IOException;
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
4 import java.nio.channels.ClosedChannelException;
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
5 import java.nio.channels.SelectableChannel;
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
6 import java.nio.channels.SelectionKey;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
7 import java.nio.channels.Selector;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
8 import java.nio.channels.spi.AbstractSelector;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
9 import java.nio.channels.spi.SelectorProvider;
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
10 import java.util.HashSet;
240
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
11 import java.util.Iterator;
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
12 import java.util.Set;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
13
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
14
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
15 public class REPSelector<P> extends Selector{
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
16
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
17 Selector selector;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
18
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
19 public REPSelector(AbstractSelector selector) {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
20 this.selector = selector;
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
21 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
22
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
23 public static <T>REPSelector<T> create() throws IOException{
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
24 if(REPServerSocketChannel.isSimulation){
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
25 return new SelectorSimulator<T>();
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
26 }
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
27 return new REPSelector<T>(SelectorProvider.provider().openSelector());
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
28 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
29
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
30 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
31 public void close() throws IOException {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
32 selector.close();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
33 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
34
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
35 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
36 public boolean isOpen() {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
37 return selector.isOpen();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
38 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
39
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
40 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
41 public Set<SelectionKey> keys() {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
42 return selector.keys();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
43 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
44
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
45 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
46 public SelectorProvider provider() {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
47 return selector.provider();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
48 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
49
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
50 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
51 public int select() throws IOException {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
52 return selector.select();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
53 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
54
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
55 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
56 public int select(long timeout) throws IOException {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
57 return selector.select(timeout);
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
58 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
59
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
60 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
61 public int selectNow() throws IOException {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
62 return selector.selectNow();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
63 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
64
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
65 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
66 public Set<SelectionKey> selectedKeys() {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
67 return selector.selectedKeys();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
68 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
69
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
70 @Override
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
71 public Selector wakeup() {
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
72 return selector.wakeup();
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
73 }
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
74
168
4ed6393ec68e *** empty log message ***
kono
parents: 143
diff changeset
75 public SelectionKey register(SelectableChannel ch, int ops, Object att) throws ClosedChannelException{
4ed6393ec68e *** empty log message ***
kono
parents: 143
diff changeset
76 return ch.register(selector, ops, att);
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
77 }
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
78
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
79 public Set<REPSelectionKey<P>> selectedKeys1() {
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
80 Set<SelectionKey> keys = selector.selectedKeys();
240
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
81 //System.err.println("Selected keys = "+keys);
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
82 HashSet<REPSelectionKey<P>> newKeys = new HashSet<REPSelectionKey<P>>();
240
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
83
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
84 for (Iterator<SelectionKey> it = keys.iterator();it.hasNext(); ) {
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
85 SelectionKey k = it.next();
219
13e0520470dc *** empty log message ***
kono
parents: 210
diff changeset
86 newKeys.add(new REPSelectionKey<P>(k,this));
240
168dd841be51 selected key Interator fix.
kono
parents: 219
diff changeset
87 it.remove();
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
88 }
210
3e0cd34d625d *** empty log message ***
kent
parents: 194
diff changeset
89 return newKeys;
190
63701e2a2fe8 *** empty log message ***
kent
parents: 184
diff changeset
90 }
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
91
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
92
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
93
125
9faacdd6c9cb *** empty log message ***
pin
parents:
diff changeset
94 }