annotate test/channeltest/StringPacker.java @ 268:b69d22dbc6f1

*** empty log message ***
author kono
date Thu, 11 Sep 2008 15:00:16 +0900
parents 44d502851c9e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
1 package test.channeltest;
690182302c05 *** empty log message ***
kent
parents:
diff changeset
2
690182302c05 *** empty log message ***
kent
parents:
diff changeset
3 import java.io.IOException;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
4 import java.net.InetSocketAddress;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
5 import java.net.SocketAddress;
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
6 import java.nio.ByteBuffer;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
7 import java.nio.channels.SelectionKey;
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
8 import java.nio.channels.SocketChannel;
690182302c05 *** empty log message ***
kent
parents:
diff changeset
9
690182302c05 *** empty log message ***
kent
parents:
diff changeset
10 import rep.channel.REPPack;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
11 import rep.channel.REPSelector;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
12 import rep.channel.REPServerSocketChannel;
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
13 import rep.channel.REPSocketChannel;
690182302c05 *** empty log message ***
kent
parents:
diff changeset
14
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
15 public class StringPacker implements REPPack<String> {
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
16
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
17 public StringPacker(){
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
18 }
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
19
690182302c05 *** empty log message ***
kent
parents:
diff changeset
20 public ByteBuffer packUConv(String log) {
690182302c05 *** empty log message ***
kent
parents:
diff changeset
21 int size;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
22 ByteBuffer blog = ByteBuffer.allocate(log.length()*5); // TODO どれくらいにしよう?
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
23
211
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
24 if (log.length()==0) return null;
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
25 /* ヘッダ あとでもう一回書き直す */
690182302c05 *** empty log message ***
kent
parents:
diff changeset
26 blog.putInt(0);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
27
690182302c05 *** empty log message ***
kent
parents:
diff changeset
28 /* 文字列を追加 */
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
29 for(int i=0; i<log.length(); i++){
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
30 blog.putChar(log.charAt(i));
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
31 }
209
1eec69035548 *** empty log message ***
kent
parents: 202
diff changeset
32 blog.limit(blog.position());
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
33
690182302c05 *** empty log message ***
kent
parents:
diff changeset
34 /* ヘッダに書き込む情報 */
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
35 size = blog.position();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
36 blog.rewind();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
37 /* ヘッダ 文字列の長さ */
211
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
38 blog.putInt(size-4);
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
39 blog.rewind();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
40
690182302c05 *** empty log message ***
kent
parents:
diff changeset
41 return blog;
690182302c05 *** empty log message ***
kent
parents:
diff changeset
42 }
690182302c05 *** empty log message ***
kent
parents:
diff changeset
43
690182302c05 *** empty log message ***
kent
parents:
diff changeset
44 public String unpackUConv(SocketChannel sc) throws IOException {
690182302c05 *** empty log message ***
kent
parents:
diff changeset
45 ByteBuffer bb = ByteBuffer.allocate(10);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
46
690182302c05 *** empty log message ***
kent
parents:
diff changeset
47 // ヘッダの読み込み 4Byteのハズ...?
690182302c05 *** empty log message ***
kent
parents:
diff changeset
48 bb.limit(4);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
49 sc.read(bb);
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
50 bb.rewind();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
51 int size = bb.getInt();
211
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
52
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
53 if(size==0) return null;
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
54
690182302c05 *** empty log message ***
kent
parents:
diff changeset
55 // Stringの読み込み
690182302c05 *** empty log message ***
kent
parents:
diff changeset
56 bb = ByteBuffer.allocate(size*2);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
57 bb.limit(size);
211
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
58 while(bb.remaining()>0)
44d502851c9e *** empty log message ***
kent
parents: 209
diff changeset
59 sc.read(bb);
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
60
690182302c05 *** empty log message ***
kent
parents:
diff changeset
61 // Stringに変換して返す
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
62 bb.rewind();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
63 return bb.asCharBuffer().toString();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
64 }
690182302c05 *** empty log message ***
kent
parents:
diff changeset
65
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
66 public static void main(String args[]){
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
67 REPServerSocketChannel.isSimulation=false;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
68 String str = "Hello World!";
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
69 StringPacker sp = new StringPacker();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
70 SocketAddress IP = new InetSocketAddress("localhost",20000);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
71 try {
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
72 REPSelector<String> selector;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
73 REPSocketChannel<String> rscS;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
74 REPSocketChannel<String> rscC;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
75 REPServerSocketChannel<String> rss;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
76
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
77 selector = REPSelector.create();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
78 rss = REPServerSocketChannel.<String>open(sp);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
79 rss.socket().setReuseAddress(true);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
80 rss.socket().bind(IP);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
81 rss.configureBlocking(false);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
82 rss.register(selector, SelectionKey.OP_ACCEPT, null);
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
83
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
84 rscC = REPSocketChannel.<String>create(sp);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
85 rscC.connect(IP);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
86
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
87 rscS = rss.accept1();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
88
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
89 rscC.write(str);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
90
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
91 System.out.println("receive `"+rscS.read()+"\'");
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
92
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
93 } catch (IOException e) {
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
94 // TODO Auto-generated catch block
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
95 e.printStackTrace();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
96 }
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
97 }
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
98 }