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