annotate rep/REPPacketReceive.java @ 124:97a321d91b79

*** empty log message ***
author pin
date Wed, 27 Aug 2008 17:21:25 +0900
parents 790c8dd42a7b
children 617a47cb0150
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
1 package rep;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
2
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
3 import java.io.IOException;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
4 import java.nio.ByteBuffer;
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
5 import java.nio.CharBuffer;
124
97a321d91b79 *** empty log message ***
pin
parents: 122
diff changeset
6 import java.nio.channels.SelectableChannel;
27
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
7 import java.nio.channels.SelectionKey;
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
8 import java.nio.channels.SocketChannel;
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
9 import java.nio.charset.CharacterCodingException;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
10 import java.nio.charset.Charset;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
11 import java.nio.charset.CharsetDecoder;
13
00714676d05b *** empty log message ***
pin
parents: 0
diff changeset
12 import java.util.LinkedList;
00714676d05b *** empty log message ***
pin
parents: 0
diff changeset
13 import java.util.StringTokenizer;
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
14
124
97a321d91b79 *** empty log message ***
pin
parents: 122
diff changeset
15 import rep.channel.ChannelSimulator;
97a321d91b79 *** empty log message ***
pin
parents: 122
diff changeset
16
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
17 public class REPPacketReceive {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
18
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
19 SocketChannel socketchannel;
17
806e34a6fecd *** empty log message ***
pin
parents: 16
diff changeset
20 private final int HEADER_SIZE = 24;
27
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
21 SelectionKey key;
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
22
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
23 public REPPacketReceive(SocketChannel sc){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
24 socketchannel = sc;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
25 }
27
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
26
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
27 public void setkey(SelectionKey key) {
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
28 this.key = key;
2d51078d94dd edit disconnet key.cancel and accept
fuchita
parents: 21
diff changeset
29 }
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
30
49
f8b4101746d2 UTF-8 Pack Method packUConv()/unpackUConv() add
fuchita
parents: 46
diff changeset
31
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
32 public REPCommand unpackUConv() {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
33 ByteBuffer header = ByteBuffer.allocateDirect(HEADER_SIZE);
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
34 long len = 0;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
35 header.clear();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
36 try {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
37 len = socketchannel.read(header);
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
38 if(len == -1){
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
39 if(key != null){
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
40 key.cancel();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
41 }
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
42 socketchannel.close();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
43 return null;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
44 }else if(len == 0){
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
45 return null;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
46 }
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
47 } catch (IOException e1) {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
48 e1.printStackTrace();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
49 } // limit = read length
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
50 if (len !=HEADER_SIZE) {
124
97a321d91b79 *** empty log message ***
pin
parents: 122
diff changeset
51 System.out.println("error.");
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
52 // this can't happen
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
53 }
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
54 header.rewind(); // position = 0
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
55
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
56 int cmd = header.getInt();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
57 int sid = header.getInt();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
58 int eid = header.getInt();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
59 int seqid = header.getInt();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
60 int lineno = header.getInt();
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
61 int textsiz = header.getInt();
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
62
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
63 ByteBuffer textBuffer = ByteBuffer.allocateDirect(textsiz);
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
64
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
65 try {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
66 len = socketchannel.read(textBuffer);
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
67 if(len == -1){
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
68 if(key != null){
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
69 key.cancel();
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
70 }
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
71 socketchannel.close();
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
72 return null;
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
73 }
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
74 } catch (IOException e1) {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
75 e1.printStackTrace();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
76 } // limit = read length
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
77 if (len != textsiz) {
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
78 // this can't happen
124
97a321d91b79 *** empty log message ***
pin
parents: 122
diff changeset
79 System.out.println("error.");
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
80 }
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
81 textBuffer.rewind();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
82
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
83 //Decode UTF-8 to System Encoding(UTF-16)
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
84 Charset charset = Charset.forName("UTF-8");
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
85 CharsetDecoder decoder = charset.newDecoder();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
86 CharBuffer cb = null;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
87 try {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
88 cb = decoder.decode(textBuffer);
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
89 } catch (CharacterCodingException e) {
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
90 e.printStackTrace();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
91 }
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
92 cb.rewind();
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
93
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
94 String string = cb.toString();
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
95
51
e9fba549803e UTF-8 Pack Method packUConv()/unpackUConv() add
fuchita
parents: 49
diff changeset
96 textsiz = string.length();
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
97
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
98 REPCommand repcommand = new REPCommand(cmd, sid, eid, seqid, lineno, textsiz, string);
46
4fdeeb2d5645 UTF-8 Pack Method PackUConv() add
fuchita
parents: 33
diff changeset
99 System.out.println("UnPack Packet: => cmd:"+cmd+" sid:"+sid+" eid:"+eid+"seqid:"+seqid+" lineno:"+lineno+" textsiz:" +textsiz+" text: "+string);
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
100 System.out.println("received command: " + repcommand.toString());
49
f8b4101746d2 UTF-8 Pack Method packUConv()/unpackUConv() add
fuchita
parents: 46
diff changeset
101
33
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
102 return repcommand;
1b05995d3118 add UTF-8 unpack method -> unpackUConv()
fuchita
parents: 27
diff changeset
103 }
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
104 }