annotate test/channeltest/StringPacker.java @ 202:ffedaf382e0c

*** empty log message ***
author kent
date Sat, 30 Aug 2008 11:15:31 +0900
parents fc8ee7600cf3
children 1eec69035548
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
690182302c05 *** empty log message ***
kent
parents:
diff changeset
24 /* ヘッダ あとでもう一回書き直す */
690182302c05 *** empty log message ***
kent
parents:
diff changeset
25 blog.putInt(0);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
26
690182302c05 *** empty log message ***
kent
parents:
diff changeset
27 /* 文字列を追加 */
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
28 for(int i=0; i<log.length(); i++){
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
29 blog.putChar(log.charAt(i));
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
30 }
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
31 blog.limit();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
32
690182302c05 *** empty log message ***
kent
parents:
diff changeset
33 /* ヘッダに書き込む情報 */
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
34 size = blog.position();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
35 blog.rewind();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
36 /* ヘッダ 文字列の長さ */
690182302c05 *** empty log message ***
kent
parents:
diff changeset
37 blog.putInt(size);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
38 blog.rewind();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
39
690182302c05 *** empty log message ***
kent
parents:
diff changeset
40 return blog;
690182302c05 *** empty log message ***
kent
parents:
diff changeset
41 }
690182302c05 *** empty log message ***
kent
parents:
diff changeset
42
690182302c05 *** empty log message ***
kent
parents:
diff changeset
43 public String unpackUConv(SocketChannel sc) throws IOException {
690182302c05 *** empty log message ***
kent
parents:
diff changeset
44 ByteBuffer bb = ByteBuffer.allocate(10);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
45
690182302c05 *** empty log message ***
kent
parents:
diff changeset
46 // ヘッダの読み込み 4Byteのハズ...?
690182302c05 *** empty log message ***
kent
parents:
diff changeset
47 bb.limit(4);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
48 sc.read(bb);
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
49 bb.rewind();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
50 int size = bb.getInt();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
51
690182302c05 *** empty log message ***
kent
parents:
diff changeset
52 // Stringの読み込み
690182302c05 *** empty log message ***
kent
parents:
diff changeset
53 bb = ByteBuffer.allocate(size*2);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
54 bb.limit(size);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
55 sc.read(bb);
690182302c05 *** empty log message ***
kent
parents:
diff changeset
56
690182302c05 *** empty log message ***
kent
parents:
diff changeset
57 // Stringに変換して返す
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
58 bb.rewind();
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
59 return bb.asCharBuffer().toString();
690182302c05 *** empty log message ***
kent
parents:
diff changeset
60 }
690182302c05 *** empty log message ***
kent
parents:
diff changeset
61
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
62 public static void main(String args[]){
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
63 REPServerSocketChannel.isSimulation=false;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
64 String str = "Hello World!";
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
65 StringPacker sp = new StringPacker();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
66 SocketAddress IP = new InetSocketAddress("localhost",20000);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
67 try {
202
ffedaf382e0c *** empty log message ***
kent
parents: 187
diff changeset
68 REPSelector<String> selector;
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
69 REPSocketChannel<String> rscS;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
70 REPSocketChannel<String> rscC;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
71 REPServerSocketChannel<String> rss;
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
72
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
73 selector = REPSelector.create();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
74 rss = REPServerSocketChannel.<String>open(sp);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
75 rss.socket().setReuseAddress(true);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
76 rss.socket().bind(IP);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
77 rss.configureBlocking(false);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
78 rss.register(selector, SelectionKey.OP_ACCEPT, null);
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
79
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
80 rscC = REPSocketChannel.<String>create(sp);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
81 rscC.connect(IP);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
82
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
83 rscS = rss.accept1();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
84
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
85 rscC.write(str);
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
86
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
87 System.out.println("receive `"+rscS.read()+"\'");
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
88
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
89 } catch (IOException e) {
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
90 // TODO Auto-generated catch block
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
91 e.printStackTrace();
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
92 }
fc8ee7600cf3 *** empty log message ***
kent
parents: 171
diff changeset
93 }
171
690182302c05 *** empty log message ***
kent
parents:
diff changeset
94 }