annotate test/channeltest/StringPacker.java @ 187:fc8ee7600cf3

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