annotate rep/channel/REPSocketChannel.java @ 171:690182302c05

*** empty log message ***
author kent
date Thu, 28 Aug 2008 18:56:59 +0900
parents 31334767e65d
children 72252e970a8b
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;
137
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
4 import java.net.Socket;
153
4cfed12aa3aa *** empty log message ***
kono
parents: 147
diff changeset
5 import java.net.SocketAddress;
136
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
6 import java.nio.ByteBuffer;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
7 import java.nio.channels.ClosedChannelException;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
8 import java.nio.channels.SelectableChannel;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
9 import java.nio.channels.SelectionKey;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
10 import java.nio.channels.Selector;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
11 import java.nio.channels.SocketChannel;
140
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
12 import java.nio.channels.ServerSocketChannel;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
13 import java.nio.channels.spi.SelectorProvider;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
14
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
15 public class REPSocketChannel<P> extends SelectableChannel{
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
16
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
17 private SocketChannel sc;
147
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
18 private REPUnpack<P> unpack;
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
19 private REPPack<P> pack;
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
20
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
21 public REPSocketChannel(SocketChannel channel) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
22 sc = channel;
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
23 }
147
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
24
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
25 public void setUnpack(REPUnpack<P> _unpack){
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
26 unpack = _unpack;
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
27 }
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
28 public void setPack(REPPack<P> _pack){
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
29 pack = _pack;
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
30 }
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
31
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
32
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
33 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
34 public Object blockingLock() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
35 return sc.blockingLock();
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 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
39 public SelectableChannel configureBlocking(boolean block) throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
40 return sc.configureBlocking(block);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
41 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
42
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
43 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
44 public boolean isBlocking() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
45 return sc.isBlocking();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
46 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
47
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
48 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
49 public boolean isRegistered() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
50 return sc.isRegistered();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
51 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
52
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
53 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
54 public SelectionKey keyFor(Selector sel) {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
55 return sc.keyFor(sel);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
56 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
57
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
58 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
59 public SelectorProvider provider() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
60 return sc.provider();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
61 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
62
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
63 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
64 public SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
65 return sc.register(sel, ops, att);
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
66 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
67
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
68 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
69 public int validOps() {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
70 return sc.validOps();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
71 }
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
72
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
73 @Override
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
74 protected void implCloseChannel() throws IOException {
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
75 sc.close();
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
76 }
136
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
77
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
78 public long read(ByteBuffer header) {
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
79 // TODO Auto-generated method stub
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
80 return 0;
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
81 }
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
82
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
83 public void write(ByteBuffer buffer) throws IOException {
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
84 // TODO Auto-generated method stub
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
85
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
86 }
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
87
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
88 public boolean finishConnect() {
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
89 // TODO Auto-generated method stub
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
90 return false;
a4e2bceb9713 *** empty log message ***
pin
parents: 123
diff changeset
91 }
137
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
92
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
93 public Socket socket() {
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
94 // TODO Auto-generated method stub
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
95 return null;
1ea856259add *** empty log message ***
pin
parents: 136
diff changeset
96 }
143
785a3e8ea858 *** empty log message ***
kent
parents: 140
diff changeset
97
147
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
98 public P read() throws IOException{
171
690182302c05 *** empty log message ***
kent
parents: 156
diff changeset
99 return unpack.unpackUConv(sc);
143
785a3e8ea858 *** empty log message ***
kent
parents: 140
diff changeset
100 }
145
ec625f8f8d7c *** empty log message ***
kent
parents: 143
diff changeset
101 public boolean write(P p){
147
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
102 ByteBuffer bb = pack.packUConv(p);
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
103 try {
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
104 while (bb.remaining() > 0 ){
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
105 sc.write(bb);
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
106 }
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
107 return true;
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
108 } catch (IOException e) {
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
109 return false;
4ff68518e9ca *** empty log message ***
kent
parents: 145
diff changeset
110 }
145
ec625f8f8d7c *** empty log message ***
kent
parents: 143
diff changeset
111 }
140
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
112
145
ec625f8f8d7c *** empty log message ***
kent
parents: 143
diff changeset
113 public static <T> REPSocketChannel<T> create() throws IOException {
140
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
114 if (REPServerSocketChannel.isSimulation) {
145
ec625f8f8d7c *** empty log message ***
kent
parents: 143
diff changeset
115 return new ChannelSimulator<T>(null);
140
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
116 } else {
145
ec625f8f8d7c *** empty log message ***
kent
parents: 143
diff changeset
117 return new REPSocketChannel<T>(SocketChannel.open());
140
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
118 }
01062be677e9 *** empty log message ***
kono
parents: 137
diff changeset
119 }
153
4cfed12aa3aa *** empty log message ***
kono
parents: 147
diff changeset
120
4cfed12aa3aa *** empty log message ***
kono
parents: 147
diff changeset
121 public boolean connect(SocketAddress semaIP) throws IOException {
4cfed12aa3aa *** empty log message ***
kono
parents: 147
diff changeset
122 return sc.connect(semaIP);
4cfed12aa3aa *** empty log message ***
kono
parents: 147
diff changeset
123 }
156
31334767e65d *** empty log message ***
kono
parents: 153
diff changeset
124
123
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
125
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
126
5b1a0574b406 *** empty log message ***
pin
parents:
diff changeset
127 }