annotate src/myVncClient/MyRfbProto.java @ 93:71bfbb5241bf

modify CuiMyVncClient
author e085711
date Thu, 22 Sep 2011 05:43:48 +0900
parents d89e03d99b7f
children 53236c2c1229
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
f9ecb0315303 add package
e085711
parents: 15
diff changeset
1 package myVncClient;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
2
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
3
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
4 import java.awt.Graphics;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
5 import java.awt.Image;
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
6 import java.awt.image.BufferedImage;
65
4225c2fd3e16 modify CuiMyVncClient.java
e085711
parents: 60
diff changeset
7 import java.io.BufferedInputStream;
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
8 import java.io.BufferedOutputStream;
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
9 import java.io.BufferedReader;
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
10 import java.io.ByteArrayInputStream;
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
11 import java.io.ByteArrayOutputStream;
65
4225c2fd3e16 modify CuiMyVncClient.java
e085711
parents: 60
diff changeset
12 import java.io.DataInputStream;
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
13 import java.io.IOException;
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
14 import java.io.InputStream;
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
15 import java.io.InputStreamReader;
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
16 import java.net.BindException;
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
17 import java.net.ServerSocket;
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
18 import java.net.Socket;
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
19 import java.nio.ByteBuffer;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
20 import java.util.Iterator;
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
21 import java.util.LinkedList;
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
22
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
23 import javax.imageio.ImageIO;
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
24
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
25 import myVncClient.MulticastQueue.Client;
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
26
25
49eed04b9b3b add SendThread, modify MyRfbProto.java
e085711
parents: 22
diff changeset
27 import java.util.concurrent.ExecutorService;
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
28 import java.util.concurrent.atomic.AtomicBoolean;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
29 import java.util.concurrent.atomic.AtomicInteger;
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
30 import java.util.zip.DataFormatException;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
31 import java.util.zip.Deflater;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
32 import java.util.zip.Inflater;
25
49eed04b9b3b add SendThread, modify MyRfbProto.java
e085711
parents: 22
diff changeset
33 import java.io.OutputStream;
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
34
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
35 public
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
36 class MyRfbProto extends RfbProto {
89
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
37 final static String versionMsg_3_855 = "RFB 003.855\n";
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
38
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
39 /**
89
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
40 * CheckMillis is one of new msgType for RFB 3.855.
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
41 */
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
42 final static byte SpeedCheckMillis = 4;
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
43 final static byte WriteJpegData = 5;
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
44
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
45 private static final int INFLATE_BUFSIZE = 1024*100;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
46 boolean printStatusFlag = false;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
47 long startCheckTime;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
48
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
49 private int messageType;
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
50 private int rectangles;
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
51 private int rectX;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
52 private int rectY;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
53 private int rectW;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
54 private int rectH;
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
55 private int encoding;
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
56 private int zLen;
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
57 private boolean clicomp = false;
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
58
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
59 private ServerSocket servSock;
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
60 private int acceptPort;
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
61 private byte initData[];
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
62 private LinkedList<Socket> cliListTmp;
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
63 private LinkedList<Socket> cliList;
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
64 boolean createBimgFlag;
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
65 boolean proxyFlag = false;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
66
72
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
67 //override
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
68 InterfaceForViewer viewer;
34
76f5994f2af2 modfy MyVncClient.java
e085711
parents: 28
diff changeset
69
25
49eed04b9b3b add SendThread, modify MyRfbProto.java
e085711
parents: 22
diff changeset
70 ExecutorService executor;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
71
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
72 byte[] pngBytes;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
73
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
74 // private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MostRecentMultiCast<LinkedList<ByteBuffer>>(10);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
75 private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
76 private int clients = 0;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
77 private Inflater inflater = new Inflater();
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
78 private Deflater deflater = new Deflater();
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
79
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
80 public
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
81 MyRfbProto() throws IOException {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
82 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
83
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
84 MyRfbProto(String h, int p, VncViewer v) throws IOException {
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
85 super(h, p, v);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
86 cliList = new LinkedList<Socket>();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
87 cliListTmp = new LinkedList<Socket>();
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
88 createBimgFlag = false;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
89 // sendThreads = new LinkedList<Thread>();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
90 // executor = Executors.newCachedThreadPool();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
91 // executor = Executors.newSingleThreadExecutor();
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
92 }
89
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
93
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
94 MyRfbProto(String h, int p, MyVncClient v) throws IOException {
93
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
95 super(h, p);
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
96 this.viewer = v;
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
97 cliList = new LinkedList<Socket>();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
98 cliListTmp = new LinkedList<Socket>();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
99 createBimgFlag = false;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
100 proxyFlag = false;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
101 // sendThreads = new LinkedList<Thread>();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
102 // executor = Executors.newCachedThreadPool();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
103 // executor = Executors.newSingleThreadExecutor();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
104 }
93
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
105
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
106 MyRfbProto(String h, int p, CuiMyVncClient v) throws IOException {
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
107 super(h, p);
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
108 this.viewer = v;
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
109 cliList = new LinkedList<Socket>();
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
110 cliListTmp = new LinkedList<Socket>();
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
111 createBimgFlag = false;
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
112 proxyFlag = false;
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
113 // sendThreads = new LinkedList<Thread>();
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
114 // executor = Executors.newCachedThreadPool();
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
115 // executor = Executors.newSingleThreadExecutor();
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
116 }
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
117
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
118
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
119 MyRfbProto(String h, int p) throws IOException {
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
120 super(h, p);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
121 cliList = new LinkedList<Socket>();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
122 cliListTmp = new LinkedList<Socket>();
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
123 createBimgFlag = false;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
124 // sendThreads = new LinkedList<Thread>();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
125 // executor = Executors.newCachedThreadPool();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
126 // executor = Executors.newSingleThreadExecutor();
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
127 }
72
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
128
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
129
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
130 void sendProxyFlag(OutputStream os) throws IOException {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
131 if(proxyFlag) os.write(1);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
132 else os.write(0);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
133 }
89
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
134
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
135 boolean readProxyFlag() throws IOException{
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
136 int flag = readU8();
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
137 if(flag == 1)
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
138 return true;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
139 else
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
140 return false;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
141 }
72
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
142
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
143 /*
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
144 void sendPortNumber(OutputStream os) throws IOException {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
145 byte[] b = new byte[4];
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
146 b = castIntByte(geth.port);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
147 os.write(b);
72
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
148 }
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
149 */
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
150
73
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
151 byte[] readEchoPort() throws Exception {
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
152 byte[] b = new byte[4];
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
153 readFully(b);
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
154
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
155 return b;
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
156 }
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
157
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
158
72
ec66d1d4dca0 modify MyVncClient.connectAndAuthenticate()
e085711
parents: 71
diff changeset
159
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
160 void changeParent(String h, int p) throws IOException {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
161 host = h;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
162 port = p;
84
143c52bf3a94 modify MyVncClient.java
one
parents: 78
diff changeset
163
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
164 sock = new Socket(host, port);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
165 is = new DataInputStream(new BufferedInputStream(sock.getInputStream(),
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
166 16384));
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
167 os = sock.getOutputStream();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
168
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
169 timing = false;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
170 timeWaitedIn100us = 5;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
171 timedKbits = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
172 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
173
28
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
174 // over write
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
175 void writeVersionMsg() throws IOException {
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
176 clientMajor = 3;
89
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
177 if (serverMinor == 855) {
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
178 clientMinor = 855;
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
179 os.write(versionMsg_3_855.getBytes());
3ea33e683522 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 86
diff changeset
180 } else if (serverMajor > 3 || serverMinor >= 8) {
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
181 clientMinor = 8;
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
182 os.write(versionMsg_3_8.getBytes());
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
183 } else if (serverMinor >= 7) {
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
184 clientMinor = 7;
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
185 os.write(versionMsg_3_7.getBytes());
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
186 } else {
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
187 clientMinor = 3;
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
188 os.write(versionMsg_3_3.getBytes());
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
189 }
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
190 protocolTightVNC = false;
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
191 initCapabilities();
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
192 }
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
193
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
194 void initServSock(int port) throws IOException {
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
195 servSock = new ServerSocket(port);
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
196 acceptPort = port;
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
197 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
198
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
199 // 5550を開けるが、開いてないなら+1のポートを開ける。
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
200 void selectPort(int p) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
201 int port = p;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
202 while (true) {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
203 try {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
204 initServSock(port);
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
205 break;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
206 } catch (BindException e) {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
207 port++;
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
208 continue;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
209 } catch (IOException e) {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
210
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
211 }
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
212 }
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
213 System.out.println("accept port = " + port);
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
214 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
215
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
216 int getAcceptPort() {
18
4881586aead9 succeed drawFirstimage()!!
e085711
parents: 17
diff changeset
217 return acceptPort;
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
218 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
219
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
220 void setSoTimeout(int num) throws IOException {
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
221 servSock.setSoTimeout(num);
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
222 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
223
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
224 Socket accept() throws IOException {
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
225 return servSock.accept();
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
226 }
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
227
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
228 void addSock(Socket sock) {
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
229 cliList.add(sock);
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
230 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
231
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
232 void addSockTmp(Socket sock) {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
233 System.out.println("connected " + sock.getInetAddress());
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
234 cliListTmp.add(sock);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
235 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
236
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
237 boolean markSupported() {
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
238 return is.markSupported();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
239 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
240
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
241 void readServerInit() throws IOException {
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
242
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
243 is.mark(255);
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
244 skipBytes(20);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
245 int nlen = readU32();
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
246 int blen = 20 + 4 + nlen;
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
247 initData = new byte[blen];
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
248 is.reset();
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
249
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
250 is.mark(blen);
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
251 readFully(initData);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
252 is.reset();
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
253
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
254 framebufferWidth = readU16();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
255 framebufferHeight = readU16();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
256 bitsPerPixel = readU8();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
257 depth = readU8();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
258 bigEndian = (readU8() != 0);
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
259 trueColour = (readU8() != 0);
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
260 redMax = readU16();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
261 greenMax = readU16();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
262 blueMax = readU16();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
263 redShift = readU8();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
264 greenShift = readU8();
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
265 blueShift = readU8();
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
266 byte[] pad = new byte[3];
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
267 readFully(pad);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
268 int nameLength = readU32();
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
269 byte[] name = new byte[nameLength];
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
270 readFully(name);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
271 desktopName = new String(name);
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
272
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
273 // Read interaction capabilities (TightVNC protocol extensions)
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
274 if (protocolTightVNC) {
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
275 int nServerMessageTypes = readU16();
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
276 int nClientMessageTypes = readU16();
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
277 int nEncodingTypes = readU16();
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
278 readU16();
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
279 readCapabilityList(serverMsgCaps, nServerMessageTypes);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
280 readCapabilityList(clientMsgCaps, nClientMessageTypes);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
281 readCapabilityList(encodingCaps, nEncodingTypes);
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
282 }
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
283
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
284 inNormalProtocol = true;
7
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
285 }
94c9e7825be2 add class MyRfbProto
e085711
parents:
diff changeset
286
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
287 void sendRfbVersion(OutputStream os) throws IOException {
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
288 os.write(versionMsg_3_855.getBytes());
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
289 // os.write(versionMsg_3_8.getBytes());
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
290 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
291
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
292 int readVersionMsg(InputStream is, OutputStream os) throws IOException {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
293
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
294 byte[] b = new byte[12];
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
295
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
296 is.read(b);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
297
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
298 if ((b[0] != 'R') || (b[1] != 'F') || (b[2] != 'B') || (b[3] != ' ')
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
299 || (b[4] < '0') || (b[4] > '9') || (b[5] < '0') || (b[5] > '9')
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
300 || (b[6] < '0') || (b[6] > '9') || (b[7] != '.')
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
301 || (b[8] < '0') || (b[8] > '9') || (b[9] < '0') || (b[9] > '9')
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
302 || (b[10] < '0') || (b[10] > '9') || (b[11] != '\n')) {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
303 throw new IOException("Host " + host + " port " + port
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
304 + " is not an RFB server");
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
305 }
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
306
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
307 int rfbMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0');
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
308 int rfbMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0');
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
309
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
310 if (rfbMajor < 3) {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
311 throw new IOException(
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
312 "RFB server does not support protocol version 3");
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
313 }
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
314
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
315 if (rfbMinor == 855) {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
316 sendProxyFlag(os);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
317 // if(proxyFlag)sendPortNumber(os);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
318 }
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
319 return rfbMinor;
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
320
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
321 } void readVersionMsg(InputStream is) throws IOException {
28
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
322
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
323 byte[] b = new byte[12];
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
324
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
325 is.read(b);
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
326
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
327 if ((b[0] != 'R') || (b[1] != 'F') || (b[2] != 'B') || (b[3] != ' ')
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
328 || (b[4] < '0') || (b[4] > '9') || (b[5] < '0') || (b[5] > '9')
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
329 || (b[6] < '0') || (b[6] > '9') || (b[7] != '.')
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
330 || (b[8] < '0') || (b[8] > '9') || (b[9] < '0') || (b[9] > '9')
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
331 || (b[10] < '0') || (b[10] > '9') || (b[11] != '\n')) {
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
332 throw new IOException("Host " + host + " port " + port
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
333 + " is not an RFB server");
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
334 }
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
335
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
336 serverMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0');
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
337 serverMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0');
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
338
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
339 if (serverMajor < 3) {
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
340 throw new IOException(
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
341 "RFB server does not support protocol version 3");
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
342 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
343
73
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
344
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
345 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
346
73
83acdeca0539 modify EchoClient
e085711
parents: 72
diff changeset
347
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
348 void sendSecurityType(OutputStream os) throws IOException {
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
349 // number-of-security-types
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
350 os.write(1);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
351 // security-types
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
352 // 1:None
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
353 os.write(1);
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
354 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
355
28
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
356 void readSecType(InputStream is) throws IOException {
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
357 byte[] b = new byte[1];
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
358 is.read(b);
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
359
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
360 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
361
28
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
362 void sendSecResult(OutputStream os) throws IOException {
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
363 byte[] b = castIntByte(0);
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
364 os.write(b);
68f0bc9c4211 modify MyRfbProto.java and acceptThread.java
e085711
parents: 27
diff changeset
365 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
366
27
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
367 void readClientInit(InputStream in) throws IOException {
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
368 byte[] b = new byte[0];
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
369 in.read(b);
53c831c3a513 add RFB 003.998
e085711
parents: 25
diff changeset
370 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
371
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
372 void sendInitData(OutputStream os) throws IOException {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
373 os.write(initData);
8
efb8090ce9c3 update MyRfbProto
e085711
parents: 7
diff changeset
374 }
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
375
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
376
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
377 void sendPngImage() {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
378 try {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
379 for (Socket cli : cliListTmp) {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
380 try {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
381 sendPngData(cli);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
382 addSock(cli);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
383 } catch (IOException e) {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
384 // if socket closed
965360af5f0b merged some file
e085711
parents: 18
diff changeset
385 cliListTmp.remove(cli);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
386 }
965360af5f0b merged some file
e085711
parents: 18
diff changeset
387 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
388 // System.out.println("cliSize="+cliSize());
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
389 } catch (Exception e) {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
390 }
965360af5f0b merged some file
e085711
parents: 18
diff changeset
391 cliListTmp.clear();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
392 }
965360af5f0b merged some file
e085711
parents: 18
diff changeset
393
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
394 boolean ready() throws IOException {
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
395 BufferedReader br = new BufferedReader(new InputStreamReader(is));
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
396 return br.ready();
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
397 }
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
398
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
399 int cliSize() {
10
9c7eab50c708 update MyRfbProto. add acceptThread
e085711
parents: 9
diff changeset
400 return cliList.size();
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
401 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
402
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
403 void printNumBytesRead() {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
404 System.out.println("numBytesRead=" + numBytesRead);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
405 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
406
44
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
407
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
408
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
409 void regiFramebufferUpdate() throws IOException {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
410 is.mark(20);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
411 messageType = readU8(); // 0
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
412 skipBytes(1); // 1
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
413 rectangles = readU16(); // 2
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
414 rectX = readU16(); // 4
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
415 rectY = readU16(); // 6
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
416 rectW = readU16(); // 8
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
417 rectH = readU16(); // 10
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
418 encoding = readU32(); // 12
78
e085711
parents: 73
diff changeset
419 // System.out.println("encoding = "+encoding);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
420 if (encoding == EncodingZRLE|| encoding==EncodingZRLEE||encoding==EncodingZlib)
44
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
421 zLen = readU32();
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
422 else
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
423 zLen = 0;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
424 is.reset();
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
425
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
426 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
427
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
428 int checkAndMark() throws IOException {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
429 int dataLen;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
430 switch (encoding) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
431 case RfbProto.EncodingRaw:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
432 dataLen = rectW * rectH * 4 + 16;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
433 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
434 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
435 case RfbProto.EncodingCopyRect:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
436 dataLen = 16 + 4;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
437 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
438 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
439 case RfbProto.EncodingRRE:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
440 case RfbProto.EncodingCoRRE:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
441 case RfbProto.EncodingHextile:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
442 case RfbProto.EncodingTight:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
443 dataLen = zLen + 20;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
444 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
445 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
446 case RfbProto.EncodingZlib:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
447 case RfbProto.EncodingZRLE:
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
448 case RfbProto.EncodingZRLEE:
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
449 dataLen = zLen + 20;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
450 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
451 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
452 case RfbProto.EncodingXCursor:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
453 case RfbProto.EncodingRichCursor:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
454 int pixArray = rectW * rectH * 4;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
455 int u8Array = (int)Math.floor((rectW + 7)/8) * rectH;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
456 dataLen = pixArray + u8Array;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
457 printFramebufferUpdate();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
458 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
459 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
460 default:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
461 dataLen = 1000000;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
462 is.mark(dataLen);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
463 }
44
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
464 return dataLen;
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
465 }
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
466
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
467
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
468 void sendDataToClient() throws Exception {
44
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
469 regiFramebufferUpdate();
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
470 int dataLen = checkAndMark();
034528dfb650 modify MuRfbProto.java VncCanvas.java. create sendDataToClient method.
e085711
parents: 34
diff changeset
471 readSendData(dataLen);
25
49eed04b9b3b add SendThread, modify MyRfbProto.java
e085711
parents: 22
diff changeset
472 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
473
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
474 BufferedImage createBufferedImage(Image img) {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
475 BufferedImage bimg = new BufferedImage(img.getWidth(null),
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
476 img.getHeight(null), BufferedImage.TYPE_INT_RGB);
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
477
965360af5f0b merged some file
e085711
parents: 18
diff changeset
478 Graphics g = bimg.getGraphics();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
479 g.drawImage(img, 0, 0, null);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
480 g.dispose();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
481 return bimg;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
482 }
965360af5f0b merged some file
e085711
parents: 18
diff changeset
483
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
484 void createPngBytes(BufferedImage bimg) throws IOException {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
485 pngBytes = getImageBytes(bimg, "png");
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
486 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
487
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
488 byte[] getBytes(BufferedImage img) throws IOException {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
489 byte[] b = getImageBytes(img, "png");
965360af5f0b merged some file
e085711
parents: 18
diff changeset
490 return b;
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
491 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
492
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
493 byte[] getImageBytes(BufferedImage image, String imageFormat)
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
494 throws IOException {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
495 ByteArrayOutputStream bos = new ByteArrayOutputStream();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
496 BufferedOutputStream os = new BufferedOutputStream(bos);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
497 image.flush();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
498 ImageIO.write(image, imageFormat, os);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
499 os.flush();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
500 os.close();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
501 return bos.toByteArray();
965360af5f0b merged some file
e085711
parents: 18
diff changeset
502 }
965360af5f0b merged some file
e085711
parents: 18
diff changeset
503
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
504 void sendPngData(Socket sock) throws IOException {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
505 byte[] dataLength = castIntByte(pngBytes.length);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
506 sock.getOutputStream().write(dataLength);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
507 sock.getOutputStream().write(pngBytes);
965360af5f0b merged some file
e085711
parents: 18
diff changeset
508 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
509
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
510 byte[] castIntByte(int len) {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
511 byte[] b = new byte[4];
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
512 b[0] = (byte) ((len >>> 24) & 0xFF);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
513 b[1] = (byte) ((len >>> 16) & 0xFF);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
514 b[2] = (byte) ((len >>> 8) & 0xFF);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
515 b[3] = (byte) ((len >>> 0) & 0xFF);
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
516 return b;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
517 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
518
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
519 BufferedImage createBimg() throws IOException {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
520 BufferedImage bimg = ImageIO.read(new ByteArrayInputStream(pngBytes));
965360af5f0b merged some file
e085711
parents: 18
diff changeset
521 return bimg;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
522 }
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
523
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
524 void printFramebufferUpdate() {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
525
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
526 System.out.println("messageType=" + messageType);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
527 System.out.println("rectangles=" + rectangles);
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
528 System.out.println("encoding=" + encoding);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
529 System.out.println("rectX = "+rectX+": rectY = "+rectY);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
530 System.out.println("rectW = "+rectW+": rectH = "+rectH);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
531 switch (encoding) {
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
532 case RfbProto.EncodingRaw:
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
533 System.out.println("rectW * rectH * 4 + 16 =" + rectW * rectH * 4
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
534 + 16);
19
965360af5f0b merged some file
e085711
parents: 18
diff changeset
535 break;
965360af5f0b merged some file
e085711
parents: 18
diff changeset
536 default:
965360af5f0b merged some file
e085711
parents: 18
diff changeset
537 }
15
745e0e1ff401 update MyRfbProto
e085711
parents: 14
diff changeset
538 }
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
539
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
540 void sendFullScreen(String imageFormat, OutputStream os) {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
541 BufferedImage bimg = getBufferedImage(viewer.getScreenImage());
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
542 try {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
543 byte[] b = getImageBytes(bimg, imageFormat);
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
544 // int len = b.length;
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
545 byte[] length = castIntByte(b.length);
93
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
546 // System.out.println("jpeg length = " + b.length);
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
547 os.write((byte)WriteJpegData);
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
548 os.write(length); // length of jpeg data
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
549 os.write(b); // jpeg data
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
550 os.flush();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
551 } catch (IOException e) {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
552 e.printStackTrace();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
553 }
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
554 }
93
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
555
71bfbb5241bf modify CuiMyVncClient
e085711
parents: 91
diff changeset
556 // unnecessary method
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
557 void readWriteJpegData() throws IOException {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
558 byte[] b = readJpegData();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
559 viewer.writeScreenData(b, "jpeg");
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
560 }
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
561
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
562 byte[] readJpegData() throws IOException {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
563 int len = readU32();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
564 byte[] b = new byte[len];
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
565 readFully(b);
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
566 return b;
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
567 }
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
568
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
569
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
570 public BufferedImage getBufferedImage(Image img) {
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
571 BufferedImage bimg = new BufferedImage(framebufferWidth, framebufferHeight, BufferedImage.TYPE_INT_RGB);
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
572 Graphics g = bimg.getGraphics();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
573 g.drawImage(img, 0, 0, null);
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
574 g.dispose();
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
575 return bimg;
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
576 }
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
577
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
578
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
579 void readSpeedCheck() throws IOException {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
580 byte[] b = new byte[1];
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
581 readFully(b);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
582 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
583
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
584 void startSpeedCheck() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
585 ByteBuffer b = ByteBuffer.allocate(10);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
586 b.put((byte)SpeedCheckMillis);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
587 b.flip();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
588 startCheckTime = System.currentTimeMillis();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
589 System.out.println("startChckTime = "+ startCheckTime);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
590 LinkedList<ByteBuffer>bufs = new LinkedList<ByteBuffer>();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
591 bufs.add(b);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
592 multicastqueue.put(bufs);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
593 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
594
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
595 void endSpeedCheck() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
596 long accTime = System.currentTimeMillis();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
597 long time = accTime - startCheckTime;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
598 System.out.println("checkMillis: " + time);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
599 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
600
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
601
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
602 synchronized void changeStatusFlag() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
603 printStatusFlag = true;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
604 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
605
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
606 void printMills() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
607 if(printStatusFlag) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
608
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
609 changeStatusFlag();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
610 } else {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
611 changeStatusFlag();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
612 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
613 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
614
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
615 void speedCheckMillis() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
616 Runnable stdin = new Runnable() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
617 public void run() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
618 int c;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
619 try {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
620 while( (c = System.in.read()) != -1 ) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
621 switch(c) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
622 case 's':
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
623 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
624 default:
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
625 startSpeedCheck();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
626 break;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
627 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
628 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
629 }catch(IOException e){
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
630 System.out.println(e);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
631 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
632 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
633 };
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
634
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
635 new Thread(stdin).start();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
636 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
637
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
638 /**
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
639 * gzip byte arrays
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
640 * @param deflater
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
641 * @param inputs
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
642 * byte data[]
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
643 * @param inputIndex
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
644 * @param outputs
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
645 * byte data[]
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
646 * @return byte length in last byte array
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
647 * @throws IOException
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
648 */
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
649 public int zip(Deflater deflater,LinkedList<ByteBuffer> inputs, int inputIndex, LinkedList<ByteBuffer> outputs) throws IOException {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
650 int len = 0;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
651 ByteBuffer c1= ByteBuffer.allocate(INFLATE_BUFSIZE);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
652 while(inputIndex < inputs.size() ) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
653 ByteBuffer b1 = inputs.get(inputIndex++);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
654 deflater.setInput(b1.array(),b1.position(),b1.remaining());
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
655 /**
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
656 * If we finish() stream and reset() it, Deflater start new gzip stream, this makes continuous zlib reader unhappy.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
657 * if we remove finish(), Deflater.deflate() never flushes its output. The original zlib deflate has flush flag. I'm pretty
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
658 * sure this a kind of bug of Java library.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
659 */
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
660 if (inputIndex==inputs.size())
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
661 deflater.finish();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
662 int len1 = 0;
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
663 do {
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
664 len1 = deflater.deflate(c1.array(),c1.position(),c1.remaining());
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
665 if (len1>0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
666 len += len1;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
667 c1.position(c1.position()+len1);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
668 if (c1.remaining()==0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
669 c1.flip(); outputs.addLast(c1);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
670 c1 = ByteBuffer.allocate(INFLATE_BUFSIZE);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
671 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
672 }
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
673 } while (len1 >0 || !deflater.needsInput()); // &&!deflater.finished());
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
674 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
675 if (c1.position()!=0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
676 c1.flip(); outputs.addLast(c1);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
677 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
678 deflater.reset();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
679 return len;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
680 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
681
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
682 /**
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
683 * gunzip byte arrays
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
684 * @param inflater
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
685 * @param inputs
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
686 * byte data[]
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
687 * @param outputs
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
688 * byte data[]
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
689 *@return number of total bytes
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
690 * @throws IOException
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
691 */
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
692 public int unzip(Inflater inflater, LinkedList<ByteBuffer> inputs, int inputIndex, LinkedList<ByteBuffer> outputs,int bufSize)
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
693 throws DataFormatException {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
694 int len=0;
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
695 ByteBuffer buf = ByteBuffer.allocate(bufSize);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
696 while (inputIndex < inputs.size()) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
697 ByteBuffer input = inputs.get(inputIndex++);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
698 inflater.setInput(input.array(),input.position(),input.limit());
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
699 // if (inputIndex==inputs.size()) if inflater/deflater has symmetry, we need this
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
700 // inflater.end(); but this won't work
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
701 do {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
702 int len0 = inflater.inflate(buf.array(),buf.position(),buf.remaining());
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
703 if (len0>0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
704 buf.position(buf.position()+len0);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
705 len += len0;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
706 if (buf.remaining()==0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
707 buf.flip();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
708 outputs.addLast(buf);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
709 buf = ByteBuffer.allocate(bufSize);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
710 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
711 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
712 } while (!inflater.needsInput());
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
713 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
714 if (buf.position()!=0) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
715 buf.flip();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
716 outputs.addLast(buf);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
717 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
718 return len;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
719 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
720
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
721 /**
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
722 * send data to clients
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
723 * @param dataLen
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
724 * @throws IOException
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
725 * @throws DataFormatException
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
726 *
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
727 * Zlibed packet is compressed in context dependent way, that is, it have to send from the beginning. But this is
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
728 * impossible. So we have to compress it again for each clients. Separate deflater for each clients is necessary.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
729 *
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
730 * Java's deflater does not support flush. This means to get the result, we have to finish the compression. Reseting
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
731 * start new compression, but it is not accepted well in zlib continuous reading. So we need new Encoding ZRLEE
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
732 * which reset decoder for each packet. ZRLEE can be invisible from user, but it have to be implemented in the clients.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
733 * ZRLEE compression is not context dependent, so no recompression is necessary.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
734 */
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
735 void readSendData(int dataLen) throws IOException, DataFormatException {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
736 LinkedList<ByteBuffer>bufs = new LinkedList<ByteBuffer>();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
737 ByteBuffer header = ByteBuffer.allocate(16);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
738 readFully(header.array(),0,16);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
739 header.limit(16);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
740 if (header.get(0)==RfbProto.FramebufferUpdate) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
741 int encoding = header.getInt(12);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
742 if (encoding==RfbProto.EncodingZRLE||encoding==RfbProto.EncodingZlib) { // ZRLEE is already recompressed
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
743 ByteBuffer len = ByteBuffer.allocate(4);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
744 readFully(len.array(),0,4); len.limit(4);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
745 ByteBuffer inputData = ByteBuffer.allocate(dataLen-20);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
746 readFully(inputData.array(),0,inputData.capacity()); inputData.limit(dataLen-20);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
747 LinkedList<ByteBuffer>inputs = new LinkedList<ByteBuffer>();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
748 inputs.add(inputData);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
749
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
750 header.putInt(12, RfbProto.EncodingZRLEE); // means recompress every time
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
751 // using new Deflecter every time is incompatible with the protocol, clients have to be modified.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
752 Deflater nDeflater = deflater; // new Deflater();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
753 LinkedList<ByteBuffer> out = new LinkedList<ByteBuffer>();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
754 unzip(inflater, inputs, 0 , out, INFLATE_BUFSIZE);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
755 // dump32(inputs);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
756 int len2 = zip(nDeflater, out, 0, bufs);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
757 ByteBuffer blen = ByteBuffer.allocate(4); blen.putInt(len2); blen.flip();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
758 bufs.addFirst(blen);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
759
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
760 bufs.addFirst(header);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
761 multicastqueue.put(bufs);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
762 is.reset();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
763 return ;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
764 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
765 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
766 bufs.add(header);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
767 if (dataLen>16) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
768 ByteBuffer b = ByteBuffer.allocate(dataLen-16);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
769 readFully(b.array(),0,dataLen-16); b.limit(dataLen-16);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
770 bufs.add(b);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
771 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
772 multicastqueue.put(bufs);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
773 is.reset();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
774
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
775 // It may be compressed. We can inflate here to avoid repeating clients decompressing here,
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
776 // but it may generate too many large data. It is better to do it in each client.
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
777 // But we have do inflation for all input data, so we have to do it here.
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
778 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
779
54
c9ef47d9aa55 modify AcceptThread
e085711
parents: 52
diff changeset
780 void newClient(AcceptThread acceptThread, final Socket newCli,
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
781 final OutputStream os, final InputStream is) throws IOException {
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
782 // createBimgFlag = true;
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
783 // rfb.addSockTmp(newCli);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
784 // addSock(newCli);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
785 final int myId = clients;
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
786 final Client <LinkedList<ByteBuffer>> c = multicastqueue.newClient();
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
787 final AtomicInteger writerRunning = new AtomicInteger();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
788 writerRunning.set(1);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
789 /**
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
790 * Timeout thread. If a client is suspended, it has top of queue indefinitely, which caused memory
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
791 * overflow. After the timeout, we poll the queue and discard it. Start long wait if writer is running.
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
792 */
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
793 final Runnable timer = new Runnable() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
794 public void run() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
795 int count = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
796 for(;;) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
797 long timeout = 30000/8;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
798 try {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
799 synchronized(this) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
800 int state,flag;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
801 writerRunning.set(0);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
802 wait(timeout);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
803 flag = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
804 while((state=writerRunning.get())==0) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
805 c.poll(); // discard, should be timeout
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
806 count++;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
807 if (flag==0) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
808 System.out.println("Discarding "+myId + " count="+ count); flag = 1;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
809 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
810 wait(10); // if this is too short, writer cannot take the poll, if this is too long, memory will overflow...
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
811 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
812 if (flag==1) System.out.println("Resuming "+myId + " count="+count);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
813 if (state!=1) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
814 System.out.println("Client died "+myId);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
815 break;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
816 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
817 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
818 } catch (InterruptedException e) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
819 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
820 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
821 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
822 };
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
823 new Thread(timer).start();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
824 /**
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
825 * discard all incoming from clients
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
826 */
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
827 final Runnable reader = new Runnable() {
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
828 public void run() {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
829 byte b[] = new byte[4096];
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
830 for(;;) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
831 try {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
832 int c = is.read(b);
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
833 if (c<=0) throw new IOException();
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
834 // System.out.println("client read "+c);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
835 } catch (IOException e) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
836 try {
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
837 writerRunning.set(2);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
838 os.close();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
839 is.close();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
840 } catch (IOException e1) {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
841 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
842 return;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
843 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
844 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
845 }
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
846 };
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
847 /**
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
848 * send packets to a client
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
849 */
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
850 Runnable sender = new Runnable() {
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
851 public void run() {
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
852 writerRunning.set(1);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
853 try {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
854 /**
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
855 * initial connection of RFB protocol
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
856 */
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
857 sendRfbVersion(os);
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
858 // readVersionMsg(is);
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
859 int rfbMinor = readVersionMsg(is,os);
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
860 sendSecurityType(os);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
861 readSecType(is);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
862 sendSecResult(os);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
863 readClientInit(is);
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
864 sendInitData(os);
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
865 new Thread(reader).start(); // discard incoming packet here after.
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
866 if(rfbMinor == 855){
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
867 // send jpeg data of full screen.
91
d89e03d99b7f modify readJpegData()
e085711
parents: 90
diff changeset
868 sendFullScreen("jpeg" ,os);
90
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
869 } else {
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
870 // send raw data of full screen.
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
871
7a1e934144e6 modify RFB Protocol version 3.855.
e085711
parents: 89
diff changeset
872 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
873 for (;;) {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
874 LinkedList<ByteBuffer> bufs = c.poll();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
875 int inputIndex = 0;
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
876 ByteBuffer header = bufs.get(inputIndex);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
877 if (header==null) continue;
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
878 if (header.get(0)==RfbProto.FramebufferUpdate) {
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
879 // System.out.println("client "+ myId);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
880 }
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
881 writeToClient(os, bufs, inputIndex);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
882 writerRunning.set(1); // yes my client is awaking.
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
883 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
884 } catch (IOException e) {
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
885 try {
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
886 writerRunning.set(2);
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
887 os.close();
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
888 } catch (IOException e1) {
81
a542f92500ab modify EchoClient.java
one
parents: 78
diff changeset
889 /* if socket closed cliList.remove(newCli); */
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
890 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
891 }
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
892 }
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
893
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
894 public void writeToClient(final OutputStream os,
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
895 LinkedList<ByteBuffer> bufs, int inputIndex)
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
896 throws IOException {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
897 while(inputIndex < bufs.size()) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
898 ByteBuffer b = bufs.get(inputIndex++);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
899 os.write(b.array(), b.position(), b.limit());
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
900 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
901 os.flush();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
902 }
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
903 };
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
904 clients++;
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
905 new Thread(sender).start();
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
906
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
907 }
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
908
69
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
909
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
910 public void dump32(LinkedList<ByteBuffer>bufs) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
911 int len =0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
912 for(ByteBuffer b: bufs) len += b.remaining();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
913 ByteBuffer top = bufs.getFirst();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
914 ByteBuffer end = bufs.getLast();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
915 System.err.println("length: "+len);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
916 System.err.print("head 0: ");
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
917 for(int i = 0; i<16 && i < top.remaining(); i++) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
918 System.err.print(" "+ top.get(i));
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
919 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
920 System.err.print("tail 0: ");
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
921 for(int i = 0; i<16 && i < end.remaining(); i++) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
922 System.err.print(" "+end.get(i));
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
923 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
924 System.err.println();
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
925 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
926
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
927 private Iterable<Byte> byteBufferIterator(final LinkedList<ByteBuffer> in) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
928 return new Iterable<Byte>() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
929 public Iterator<Byte> iterator() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
930 return new Iterator<Byte>() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
931 int bytes = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
932 int buffers = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
933 public boolean hasNext() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
934 for(;;) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
935 if (buffers>=in.size()) return false;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
936 ByteBuffer b = in.get(buffers);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
937 if (! (bytes<b.remaining())) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
938 buffers ++; bytes=0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
939 } else return true;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
940 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
941 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
942 public Byte next() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
943 ByteBuffer bf =in.get(buffers);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
944 byte b = bf.get(bytes++);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
945 if (bf.remaining()<=bytes) {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
946 buffers++;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
947 bytes = 0;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
948 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
949 // System.out.print(b);
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
950 return b;
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
951 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
952 public void remove() {
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
953 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
954 };
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
955 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
956 };
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
957 }
1f05b73b15df modify MyVncClient.java and CuiMyVNcClient.java
e085711
parents: 67
diff changeset
958
45
413df87d6f8f modify MyRfbProto.java. create multicastqueue
e085711
parents: 44
diff changeset
959 }
60
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
960
18a19d8a09f4 add some files. for to use Client with CUI.
e085711
parents: 54
diff changeset
961