annotate rep/channel/SelectorSimulator.java @ 174:72252e970a8b

*** empty log message ***
author kent
date Thu, 28 Aug 2008 19:49:41 +0900
parents 785a3e8ea858
children 5653cf8e3c8b
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;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
8 import java.util.ArrayList;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
9 import java.util.Set;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
10 import java.util.TreeSet;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
11 //import java.util.Set; //書き直す?
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
12 import java.util.Set;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
13
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
14
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
15
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
16 public class SelectorSimulator extends REPSelector{
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
17
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
18 private TreeSet<SelectionKey> keyList;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
19 private TreeSet<SelectionKey> selectedKeys;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
20
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
21 public SelectorSimulator() {
125
9faacdd6c9cb *** empty log message ***
pin
parents: 123
diff changeset
22 super(null);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
23 keyList = new TreeSet<SelectionKey>();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
24 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
25
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
26 @SuppressWarnings("unchecked")
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
27 public int select() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
28 selectedKeys = new TreeSet<SelectionKey>();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
29
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
30 synchronized(this) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
31
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
32 while(selectedKeys.isEmpty()){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
33 for(SelectionKey key : keyList){
125
9faacdd6c9cb *** empty log message ***
pin
parents: 123
diff changeset
34 if(((SelectionKeySimulator) key).isAble())
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
35 selectedKeys.add(key);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
36 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
37
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
38 if(selectedKeys.isEmpty())
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
39 try {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
40 this.wait();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
41 } catch (InterruptedException e) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
42 throw new IOException("Error, Selector was interrupted!");
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
43 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
44 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
45 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
46 return selectedKeys.size();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
47 }
174
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
48 /*
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
49 public <T> SelectionKeySimulator register(SelectableChannelSimulator<T> cs, int opt){
125
9faacdd6c9cb *** empty log message ***
pin
parents: 123
diff changeset
50 SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
51 keyList.add(key);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
52 return key;
174
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
53 }*/
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
54 public SelectionKeySimulator register(SelectableChannel cs, int opt, Object handler){
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
55 SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
56 key.attach(handler);
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
57 keyList.add(key);
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
58 return key;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
59 }
174
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
60 /*
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
61 public <T> SelectionKeySimulator register(ChannelSimulator<T> cs, int opt, Object handler){
125
9faacdd6c9cb *** empty log message ***
pin
parents: 123
diff changeset
62 SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
63 key.attach(handler);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
64 keyList.add(key);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
65 return key;
174
72252e970a8b *** empty log message ***
kent
parents: 143
diff changeset
66 }*/
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
67
143
785a3e8ea858 *** empty log message ***
kent
parents: 125
diff changeset
68 public <T> SelectionKey getKey(ChannelSimulator<T> channel){
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
69 for(SelectionKey key : keyList){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
70 if(key.channel() == channel)
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
71 return key;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
72 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
73 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
74 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
75
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
76 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
77 public void close() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
78 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
79
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
80 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
81
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
82 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
83 public boolean isOpen() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
84 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
85 return false;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
86 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
87
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
88 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
89 public Set<SelectionKey> keys() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
90 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
91 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
92 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
93
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
94 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
95 public SelectorProvider provider() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
96 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
97 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
98 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
99
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
100 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
101 public int select(long timeout) throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
102 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
103 return 0;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
104 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
105
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
106 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
107 public int selectNow() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
108 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
109 return 0;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
110 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
111
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
112 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
113 public Selector wakeup() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
114 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
115 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
116 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
117
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
118 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
119 public Set<SelectionKey> selectedKeys() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
120 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
121 return (Set<SelectionKey>)selectedKeys;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
122 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
124 }