annotate rep/REPPacketReceive.java @ 0:e41994ce73c7

*** empty log message ***
author pin
date Tue, 13 Feb 2007 04:43:30 +0900
parents
children 00714676d05b
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;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
5 import java.nio.channels.SocketChannel;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
6
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
7 public class REPPacketReceive {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
8
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
9 SocketChannel socketchannel;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
10 private int HEADER_SIZE = 24;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
11
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
12 public REPPacketReceive(SocketChannel sc){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
13 socketchannel = sc;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
14 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
15
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
16
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
17 public REPCommand unpack() {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
18
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
19 ByteBuffer header = ByteBuffer.allocateDirect(HEADER_SIZE);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
20 long len = 0;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
21 header.clear();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
22 try {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
23 len = socketchannel.read(header);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
24 if(len == -1){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
25 socketchannel.close();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
26 return null;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
27 }else if(len == 0){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
28 return null;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
29 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
30 } catch (IOException e1) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
31 e1.printStackTrace();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
32 } // limit = read length
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
33 if (len !=HEADER_SIZE) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
34 System.out.println("‚Ä‚·");
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
35 // this can't happen
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
36 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
37 header.rewind(); // position = 0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
38
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
39 String text = "";
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
40 int cmd = header.getInt();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
41 int sid = header.getInt();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
42 int eid = header.getInt();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
43 int seqid = header.getInt();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
44 int lineno = header.getInt();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
45 int textsiz = header.getInt()/2;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
46
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
47 ByteBuffer textBuffer = ByteBuffer.allocateDirect(textsiz*2);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
48
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
49 try {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
50 len = socketchannel.read(textBuffer);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
51 } catch (IOException e1) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
52 e1.printStackTrace();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
53 } // limit = read length
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
54 if (len != textsiz * 2) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
55 // this can't happen
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
56 System.out.println("‚ ‚Æ");
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
57 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
58 textBuffer.rewind();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
59 for(int i=0;i<textsiz;i++) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
60 text +=textBuffer.getChar();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
61 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
62 String string = text;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
63 //System.out.println(string);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
64 REPCommand repcommand = new REPCommand(cmd, sid, eid, seqid, lineno, textsiz, string);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
65 System.out.println("received command: " + repcommand.toString());
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
66 return repcommand;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
67 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
68 }