annotate rep/channel/ChannelSimulator.java @ 143:785a3e8ea858

*** empty log message ***
author kent
date Wed, 27 Aug 2008 22:48:10 +0900
parents 5b1a0574b406
children 4cfed12aa3aa
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;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
4 import java.nio.channels.ClosedChannelException;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
5 import java.nio.channels.SelectableChannel;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
6 import java.nio.channels.SelectionKey;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
7 import java.nio.channels.Selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
8 import java.nio.channels.spi.SelectorProvider;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
9
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
10
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
11 public class ChannelSimulator<P> extends SelectableChannelSimulator<P>{
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
12 //private BlockingQueue<P> qread;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
13 //private BlockingQueue<P> qwrite;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
14 //private SelectorSimulator<P> waitingSelector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
15 protected NetworkSimulator<P> ns;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
16
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
17 /** Constructors. */
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
18 public ChannelSimulator(NetworkSimulator<P> _ns){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
19 this(_ns, null);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
20 }
143
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
21
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
22 public ChannelSimulator(NetworkSimulator<P> _ns, SelectorSimulator _selector){
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
23 super(null);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
24 ns = _ns;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
25 //ns = NetworkSimulator.singleton(); //どっちがいい?
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
26 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
27 public ChannelSimulator<P> createConjugatedChannel() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
28 ChannelSimulator<P> ret = new ChannelSimulator<P>(ns);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
29 ret.qread=qwrite;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
30 ret.qwrite=qread;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
31 ret.readSelector=writeSelector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
32 ret.writeSelector=readSelector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
33 return ret;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
34 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
35
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
36 /** Connecting methods */
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
37 // for clients.
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
38 public boolean connect(int ip){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
39 return ns.connect(ip, this);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
40 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
41
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
42 public ChannelSimulator<P> accept(){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
43 return null;
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 state of the Queue(debug) */
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
47 /*
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
48 public boolean readQisEmpty() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
49 return qread.isEmpty();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
50 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
51 public boolean writeQisEmpty() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
52 return qwrite.isEmpty();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
53 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
54 */
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
55
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
56 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
57 public boolean isAcceptable() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
58 return false;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
59 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
60 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
61 public boolean isReadable() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
62 synchronized (qread){
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
63 return !qread.isEmpty();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
64 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
65 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
66 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
67 public boolean isWritable() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
68 return true;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
69 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
70
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
71 public SelectionKey keyFor(Selector selector2) {
143
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
72 return ((SelectorSimulator) selector2).getKey(this);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
73 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
74 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
75 public Object blockingLock() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
76 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
77 return null;
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 SelectableChannel configureBlocking(boolean block) throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
81 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
82 return null;
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 boolean isBlocking() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
86 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
87 return false;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
88 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
89 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
90 public boolean isRegistered() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
91 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
92 return false;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
93 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
94
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
95 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
96 public SelectorProvider provider() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
97 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
98 return null;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
99 }
143
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
100 @SuppressWarnings("unchecked")
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
101 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
102 public SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException {
143
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
103 SelectorSimulator selector = (SelectorSimulator) sel;
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
104 return selector.register(this, ops, att);
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
105 }
143
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
106 public SelectionKey register(REPSelector sel, int ops, Object att) throws ClosedChannelException {
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
107 REPSelector selector = sel;
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
108 return selector.register(this, ops, att);
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
109 }
785a3e8ea858 *** empty log message ***
kent
parents: 123
diff changeset
110
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
111 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
112 public int validOps() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
113 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
114 return 0;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
115 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
116 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
117 protected void implCloseChannel() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
118 // TODO Auto-generated method stub
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
119
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
120 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
121
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
122 }