annotate rep/channel/SelectorSimulator.java @ 203:4c0a94836357 simullator-nio-both-worked

*** empty log message ***
author kono
date Sat, 30 Aug 2008 11:21:43 +0900
parents 8d7c74610b05
children 0607cc699ba3
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
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
3 import java.io.IOException;
174
72252e970a8b *** empty log message ***
kent
parents: 143
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 import java.nio.channels.spi.SelectorProvider;
176
9cf8147591ea *** empty log message ***
kent
parents: 175
diff changeset
8 import java.util.HashSet;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
9 import java.util.Set;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
10
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
11 public class SelectorSimulator<P> extends REPSelector<P>{
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
12
176
9cf8147591ea *** empty log message ***
kent
parents: 175
diff changeset
13 private Set<SelectionKey> keyList;
9cf8147591ea *** empty log message ***
kent
parents: 175
diff changeset
14 private Set<SelectionKey> selectedKeys;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
15
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
16 public SelectorSimulator() {
125
9faacdd6c9cb *** empty log message ***
pin
parents: 123
diff changeset
17 super(null);
176
9cf8147591ea *** empty log message ***
kent
parents: 175
diff changeset
18 keyList = new HashSet<SelectionKey>();
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
19 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
20
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
21 public int select() throws IOException {
176
9cf8147591ea *** empty log message ***
kent
parents: 175
diff changeset
22 selectedKeys = new HashSet<SelectionKey>();
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
23
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
24 synchronized(this) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
25
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
26 while(selectedKeys.isEmpty()){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
27 for(SelectionKey key : keyList){
203
4c0a94836357 *** empty log message ***
kono
parents: 197
diff changeset
28 if(((SelectionKeySimulator<?>) key).isAble())
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
29 selectedKeys.add(key);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
30 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
31
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
32 if(selectedKeys.isEmpty())
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
33 try {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
34 this.wait();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
35 } catch (InterruptedException e) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
36 throw new IOException("Error, Selector was interrupted!");
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 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
40 return selectedKeys.size();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
41 }
190
63701e2a2fe8 *** empty log message ***
kent
parents: 176
diff changeset
42
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
43 public SelectionKeySimulator<P> register(SelectableChannel cs, int opt){
190
63701e2a2fe8 *** empty log message ***
kent
parents: 176
diff changeset
44 return register(cs, opt, null);
63701e2a2fe8 *** empty log message ***
kent
parents: 176
diff changeset
45 }
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
46 public SelectionKeySimulator<P> register(SelectableChannel cs, int opt, Object handler){
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
47 SelectionKeySimulator<P> key = new SelectionKeySimulator<P>(cs, opt, this);
174
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
48 key.attach(handler);
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
49 keyList.add(key);
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
50 return key;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
51 }
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
52
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
53
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
54 public Set<REPSelectionKey<P>> selectedKeys1() {
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
55 Set<SelectionKey> keys = keyList;
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
56 Set<REPSelectionKey<P>> newKeys = new HashSet<REPSelectionKey<P>>();
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
57 for(SelectionKey k: keys) {
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
58 // REPSelectionKeyを生成しないように注意
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
59 newKeys.add(new SelectionKeySimulator<P>(k));
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
60 }
197
8d7c74610b05 *** empty log message ***
kent
parents: 194
diff changeset
61 return newKeys;//(Set<REPSelectionKey<P>>)newKeys;
194
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
62 }
be219ba8b39c *** empty log message ***
kono
parents: 190
diff changeset
63
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
64 public <T> SelectionKey getKey(ChannelSimulator<T> channel){
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
65 for(SelectionKey key : keyList){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
66 if(key.channel() == channel)
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
67 return key;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
68 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
69 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
70 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
71
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
72 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
73 public void close() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
74 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
75
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
76 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
77
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
78 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
79 public boolean isOpen() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
80 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
81 return false;
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 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
85 public Set<SelectionKey> keys() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
86 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
87 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
88 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
89
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
90 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
91 public SelectorProvider provider() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
92 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
93 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
94 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
95
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
96 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
97 public int select(long timeout) throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
98 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
99 return 0;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
100 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
101
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
102 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
103 public int selectNow() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
104 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
105 return 0;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
106 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
107
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
108 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
109 public Selector wakeup() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
110 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
111 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
112 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
113
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
114 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
115 public Set<SelectionKey> selectedKeys() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
116 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
117 return (Set<SelectionKey>)selectedKeys;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
118 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
119
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
120 }