annotate rep/channel/REPPacketSend.java @ 181:3a2c6c2f9761

*** empty log message ***
author kent
date Fri, 29 Aug 2008 13:30:46 +0900
parents 4ff68518e9ca
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
147
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
1 package rep.channel;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
2
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
3 import java.io.IOException;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
4 import java.nio.ByteBuffer;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
5 import java.nio.CharBuffer;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
6 import java.nio.charset.Charset;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
7 import java.nio.charset.CharsetEncoder;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
8
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
9 import rep.REPCommand;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
10 import rep.channel.REPPack;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
11
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
12
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
13 public class REPPacketSend implements REPPack<REPCommand> {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
14 REPSocketChannel<REPCommand> socketchannel;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
15 // JIS/S-JIS = 2, UTF-8 = 3, UTF-?? = 5
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
16 final int CHAR_ORDER = 5;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
17
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
18 public REPPacketSend(REPSocketChannel<REPCommand> channel){
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
19 socketchannel = channel;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
20 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
21
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
22 /* (non-Javadoc)
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
23 * @see rep.REPPack#packUConv(rep.REPCommand)
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
24 */
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
25 public ByteBuffer packUConv(REPCommand command){
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
26 System.out.println("send command byUTF8: " + command.toString());
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
27 if(command.string == null){
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
28 command.setString("test");
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
29 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
30 ByteBuffer buffer = ByteBuffer.allocateDirect(24+(command.string.length()*CHAR_ORDER));
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
31 buffer.clear(); // position = 0
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
32 buffer.putInt(command.cmd); buffer.putInt(command.sid); buffer.putInt(command.eid);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
33 buffer.putInt(command.seq); buffer.putInt(command.lineno);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
34
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
35 int pos = buffer.position();
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
36 buffer.putInt(0);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
37
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
38 //Encode to UTF8
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
39 CharBuffer cb = CharBuffer.wrap(command.string);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
40 Charset charset = Charset.forName("UTF-8");
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
41 CharsetEncoder encoder = charset.newEncoder();
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
42 try {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
43 encoder.encode(cb, buffer, true);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
44 } catch (IllegalStateException e) {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
45 e.printStackTrace();
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
46 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
47
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
48 //Encoded string length set
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
49 int length = (buffer.position() -pos) -4;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
50 System.out.println("UTF-8: Set REPComand textlen(Byte) : " + (buffer.position() - pos-4));
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
51 if(length < 0) {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
52 length = 0;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
53 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
54 buffer.putInt(pos, length);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
55
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
56 buffer.limit(24+length);
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
57 buffer.rewind();
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
58
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
59 return buffer;
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
60 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
61
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
62 /* (non-Javadoc)
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
63 * @see rep.REPPack#send(rep.REPCommand)
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
64 */
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
65 public void send(REPCommand command){
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
66 try {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
67 //socketchannel.write(pack(command));
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
68 socketchannel.write(packUConv(command));
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
69 //System.out.println(command.toString());
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
70 } catch (IOException e) {
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
71 e.printStackTrace();
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
72 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
73 }
4ff68518e9ca *** empty log message ***
kent
parents:
diff changeset
74 }