# HG changeset patch
# User e085711
# Date 1312541211 -32400
# Node ID 4225c2fd3e1609b4cc5ca316e75f8247a1bf7cac
# Parent d19913a42a3640d760f0690c14680d1f67426094
modify CuiMyVncClient.java
diff -r d19913a42a36 -r 4225c2fd3e16 build.xml
--- a/build.xml Fri Aug 05 17:26:45 2011 +0900
+++ b/build.xml Fri Aug 05 19:46:51 2011 +0900
@@ -21,6 +21,8 @@
+
+
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/CuiMyVncClient.java
--- a/src/myVncClient/CuiMyVncClient.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/CuiMyVncClient.java Fri Aug 05 19:46:51 2011 +0900
@@ -1,4 +1,5 @@
package myVncClient;
+
import java.awt.*;
import java.awt.event.*;
import java.io.*;
@@ -8,26 +9,24 @@
import myVncClient.OptionsNoFrame;
public class CuiMyVncClient implements InterfaceForViewer, java.lang.Runnable {
-
+
public static void main(String[] argv) {
CuiMyVncClient v = new CuiMyVncClient();
v.runClient(argv, v);
-
+
}
-
+
private void runClient(String[] argv, CuiMyVncClient v) {
mainArgs = argv;
v.init(null);
v.start_threads();
-
+
}
-
-
-
+
String[] mainArgs;
String username;
-
+
// RfbProto rfb;
MyRfbProto rfb;
Thread rfbThread;
@@ -41,7 +40,7 @@
ButtonPanel buttonPanel;
Label connStatusLabel;
CuiVncCanvas vc;
-// OptionsFrame options;
+ // OptionsFrame options;
OptionsNoFrame options;
ClipboardFrame clipboard;
RecordingFrame rec;
@@ -78,25 +77,24 @@
EchoClient echo;
-
- void checkArgs(String[] argv){
- if(argv.length > 3){
- username = argv[3];
- }else if(argv.length < 2){
+ void checkArgs(String[] argv) {
+ if (argv.length > 3) {
+ username = argv[3];
+ } else if (argv.length < 2) {
System.out.println("Please enter argv");
System.out.println("hostname(IPaddress) port password");
System.exit(0);
- }else{
+ } else {
username = argv[0];
}
}
-
+
//
// init()
//
public void init(EchoClient value) {
-
+
// readParameters();
readParameters(value);
@@ -110,19 +108,20 @@
cursorUpdatesDef = null;
eightBitColorsDef = null;
- try{
+ try {
connectAndAuthenticate();
- }catch (NoRouteToHostException e) {
+ } catch (NoRouteToHostException e) {
fatalError("Network error: no route to server: " + host, e);
} catch (UnknownHostException e) {
fatalError("Network error: server name unknown: " + host, e);
} catch (ConnectException e) {
fatalError("Network error: could not connect to server: " + host
+ ":" + port, e);
- }catch(Exception e){}
+ } catch (Exception e) {
+ }
rfbThread = new Thread(this);
- accThread = new Thread(new AcceptThread(rfb, 5999));
+ accThread = new Thread(new AcceptThread(rfb, 5999));
}
@@ -130,23 +129,23 @@
// run() - executed by the rfbThread to deal with the RFB socket.
//
- public void start_threads(){
+ public void start_threads() {
rfbThread.start();
+ accThread.start();
}
-
-
+
public void run() {
try {
-// connectAndAuthenticate();
+ // connectAndAuthenticate();
doProtocolInitialisation();
-/*
- htmlFile = new CreateHtmlFile(rfb, host, username);
- htmlFile.createHtml();
-*/
+ /*
+ * htmlFile = new CreateHtmlFile(rfb, host, username);
+ * htmlFile.createHtml();
+ */
vc = new CuiVncCanvas(this, 0, 0);
vc.updateFramebufferSize();
-
+
processNormalProtocol();// main loop
} catch (NoRouteToHostException e) {
@@ -157,20 +156,32 @@
fatalError("Network error: could not connect to server: " + host
+ ":" + port, e);
} catch (EOFException e) {
- if (showOfflineDesktop) {
- e.printStackTrace();
- System.out
- .println("Network error: remote side closed connection");
- if (vc != null) {
- vc.enableInput(false);
- }
- if (rfb != null && !rfb.closed())
- rfb.close();
- if (showControls && buttonPanel != null) {
- buttonPanel.disableButtonsOnDisconnect();
+
+ if (leaderflag != null) {
+ while (true) {
+ echo = new EchoClient(echo, this);
+ echo.openport();
+ // runflag = echo.losthost();
+ if (echo.losthost()) {
+ break;
+ }
}
} else {
- fatalError("Network error: remote side closed connection", e);
+ if (showOfflineDesktop) {
+ e.printStackTrace();
+ System.out
+ .println("Network error: remote side closed connection");
+ if (vc != null) {
+ vc.enableInput(false);
+ }
+ if (rfb != null && !rfb.closed())
+ rfb.close();
+ if (showControls && buttonPanel != null) {
+ buttonPanel.disableButtonsOnDisconnect();
+ }
+ } else {
+ fatalError("Network error: remote side closed connection",e);
+ }
}
} catch (IOException e) {
String str = e.getMessage();
@@ -179,7 +190,7 @@
} else {
fatalError(e.toString(), e);
}
- } catch (Exception e) {
+ } catch (Exception e) {
String str = e.getMessage();
if (str != null && str.length() != 0) {
fatalError("Error: " + str, e);
@@ -220,6 +231,7 @@
// rfb = new RfbProto(host, port, this);
rfb = new MyRfbProto(host, port);
+
showConnectionStatus("Connected to server");
rfb.readVersionMsg();
@@ -274,18 +286,17 @@
String askPassword() throws Exception {
/*
- * showConnectionStatus(null);
- * AuthPanel authPanel = new AuthPanel(this);
+ * showConnectionStatus(null); AuthPanel authPanel = new
+ * AuthPanel(this);
*
* GridBagConstraints gbc = new GridBagConstraints(); gbc.gridwidth =
* GridBagConstraints.REMAINDER; gbc.anchor =
* GridBagConstraints.NORTHWEST; gbc.weightx = 1.0; gbc.weighty = 1.0;
* gbc.ipadx = 100; gbc.ipady = 50; gridbag.setConstraints(authPanel,
* gbc); vncContainer.add(authPanel);
-
-
- authPanel.moveFocusToDefaultField();
- vncContainer.remove(authPanel);
+ *
+ *
+ * authPanel.moveFocusToDefaultField(); vncContainer.remove(authPanel);
*/
showConnectionStatus("ask password...");
String pw = mainArgs[2];
@@ -300,14 +311,13 @@
rfb.writeClientInit();
rfb.readServerInit();
-
System.out.println("Desktop name is " + rfb.desktopName);
System.out.println("Desktop size is " + rfb.framebufferWidth + " x "
+ rfb.framebufferHeight);
setEncodings();
- //showConnectionStatus(null);
+ // showConnectionStatus(null);
}
//
@@ -363,7 +373,6 @@
int[] encodings = new int[20];
int nEncodings = 0;
-
encodings[nEncodings++] = preferredEncoding;
if (options.useCopyRect) {
encodings[nEncodings++] = RfbProto.EncodingCopyRect;
@@ -381,29 +390,22 @@
encodings[nEncodings++] = RfbProto.EncodingZlib;
}
/*
- if (preferredEncoding != RfbProto.EncodingCoRRE) {
- encodings[nEncodings++] = RfbProto.EncodingCoRRE;
- }
- if (preferredEncoding != RfbProto.EncodingRRE) {
- encodings[nEncodings++] = RfbProto.EncodingRRE;
- }
+ * if (preferredEncoding != RfbProto.EncodingCoRRE) {
+ * encodings[nEncodings++] = RfbProto.EncodingCoRRE; } if
+ * (preferredEncoding != RfbProto.EncodingRRE) { encodings[nEncodings++]
+ * = RfbProto.EncodingRRE; }
+ *
+ * if (options.compressLevel >= 0 && options.compressLevel <= 9) {
+ * encodings[nEncodings++] = RfbProto.EncodingCompressLevel0 +
+ * options.compressLevel; } if (options.jpegQuality >= 0 &&
+ * options.jpegQuality <= 9) { encodings[nEncodings++] =
+ * RfbProto.EncodingQualityLevel0 + options.jpegQuality; } if
+ * (options.requestCursorUpdates) { encodings[nEncodings++] =
+ * RfbProto.EncodingXCursor; encodings[nEncodings++] =
+ * RfbProto.EncodingRichCursor; if (!options.ignoreCursorUpdates)
+ * encodings[nEncodings++] = RfbProto.EncodingPointerPos; }
+ */
- if (options.compressLevel >= 0 && options.compressLevel <= 9) {
- encodings[nEncodings++] = RfbProto.EncodingCompressLevel0
- + options.compressLevel;
- }
- if (options.jpegQuality >= 0 && options.jpegQuality <= 9) {
- encodings[nEncodings++] = RfbProto.EncodingQualityLevel0
- + options.jpegQuality;
- }
- if (options.requestCursorUpdates) {
- encodings[nEncodings++] = RfbProto.EncodingXCursor;
- encodings[nEncodings++] = RfbProto.EncodingRichCursor;
- if (!options.ignoreCursorUpdates)
- encodings[nEncodings++] = RfbProto.EncodingPointerPos;
- }
- */
-
encodings[nEncodings++] = RfbProto.EncodingLastRect;
encodings[nEncodings++] = RfbProto.EncodingNewFBSize;
@@ -421,7 +423,7 @@
if (encodingsWereChanged) {
try {
- //rfb.writeSetEncodings(encodings, nEncodings);
+ // rfb.writeSetEncodings(encodings, nEncodings);
if (vc != null) {
vc.softCursorFree();
}
@@ -553,11 +555,13 @@
if (clientSocket == null) {
String pHost;
- if (mainArgs.length > 0) pHost = mainArgs[0];
- else pHost = "cls080.ie.u-ryukyu.ac.jp";
- echo = new EchoClient(pHost,this);
+ if (mainArgs.length > 0)
+ pHost = mainArgs[0];
+ else
+ pHost = "cls080.ie.u-ryukyu.ac.jp";
+ echo = new EchoClient(pHost, this);
echo.openport();
-
+
value = echo.hostn("1");
} else {
echo = new EchoClient();
@@ -567,12 +571,12 @@
// proxyからの返信で接続先を決定する
host = value.responseLine;
parent = value.parent;
- if(value.treenum != null) {
+ if (value.treenum != null) {
treenum = value.treenum;
} else {
treenum = echo.treenum;
}
- if(value.leaderflag != null) {
+ if (value.leaderflag != null) {
leaderflag = value.leaderflag;
} else {
leaderflag = echo.leaderflag;
@@ -581,20 +585,16 @@
System.out.println("mynumber =" + treenum);
System.out.println("connect host =" + host);
System.out.println("leaderflag(boolean) = " + leaderflag);
-
+
echo = value;
-/*
- if (host == null) {
- host = getCodeBase().getHost();
- if (host.equals("")) {
- fatalError("HOST parameter not specified");
- }
- }
-*/
+ /*
+ * if (host == null) { host = getCodeBase().getHost(); if
+ * (host.equals("")) { fatalError("HOST parameter not specified"); } }
+ */
port = 5999;
// Read "ENCPASSWORD" or "PASSWORD" parameter if specified.
- //readPasswordParameters();
+ // readPasswordParameters();
String str;
if (inAnApplet) {
@@ -644,9 +644,8 @@
private void readPasswordParameters() {
String encPasswordParam = readParameter("ENCPASSWORD", false);
-
if (encPasswordParam == null) {
- passwordParam = readParameter("PASSWORD", false);
+ passwordParam = readParameter("PASSWORD", false);
} else {
// ENCPASSWORD is hexascii-encoded. Decode.
byte[] pw = { 0, 0, 0, 0, 0, 0, 0, 0 };
@@ -735,7 +734,7 @@
if (rfb != null && !rfb.closed())
rfb.close();
-// options.dispose();
+ // options.dispose();
clipboard.dispose();
if (rec != null)
rec.dispose();
@@ -821,7 +820,7 @@
System.out.println("Destroying applet");
vncContainer.removeAll();
-// options.dispose();
+ // options.dispose();
clipboard.dispose();
if (rec != null)
rec.dispose();
@@ -876,8 +875,8 @@
clientSocket = sock;
}
- public void start(){
-
+ public void start() {
+
}
-
+
}
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/CuiVncCanvas.java
--- a/src/myVncClient/CuiVncCanvas.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/CuiVncCanvas.java Fri Aug 05 19:46:51 2011 +0900
@@ -350,7 +350,7 @@
// Start/stop session recording if necessary.
viewer.checkRecordingStatus();
-
+
rfb.writeFramebufferUpdateRequest(0, 0, rfb.framebufferWidth,
rfb.framebufferHeight, false);
@@ -363,7 +363,7 @@
long count = 0;
while (true) {
- System.out.println("\ncount=" + count);
+// System.out.println("\ncount=" + count);
count++;
@@ -468,6 +468,10 @@
}
rfb.stopTiming();
+
+ long kbitsPerSecond = rfb.kbitsPerSecond();
+ System.out.println("kbitsPerSecond = " + kbitsPerSecond);
+
statNumPixelRects++;
statNumBytesDecoded += rw * rh * bytesPixel;
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/EchoClient.java
--- a/src/myVncClient/EchoClient.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/EchoClient.java Fri Aug 05 19:46:51 2011 +0900
@@ -73,8 +73,8 @@
System.err.println("Don't know about host: localhost");
} catch (IOException e) {
System.out.println("接続に失敗しました");
- System.err
- .println("Couldn't get I/O for the connection to: localhost");
+ System.err.println("Couldn't get I/O for the connection to: localhost");
+ System.exit(0);
}
}
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/MyRfbProto.java
--- a/src/myVncClient/MyRfbProto.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/MyRfbProto.java Fri Aug 05 19:46:51 2011 +0900
@@ -3,10 +3,12 @@
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
+import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -60,6 +62,7 @@
byte[] pngBytes;
+
// private MulticastQueue> multicastqueue = new MostRecentMultiCast>(10);
private MulticastQueue> multicastqueue = new MulticastQueue>();
private int clients = 0;
@@ -84,7 +87,8 @@
// executor = Executors.newCachedThreadPool();
// executor = Executors.newSingleThreadExecutor();
}
-
+
+
// over write
void writeVersionMsg() throws IOException {
clientMajor = 3;
@@ -301,7 +305,7 @@
rectW = readU16(); // 8
rectH = readU16(); // 10
encoding = readU32(); // 12
- System.out.println("encoding = "+encoding);
+ // System.out.println("encoding = "+encoding);
if (encoding == EncodingZRLE)
zLen = readU32();
else
@@ -703,6 +707,14 @@
os.write(out.array(),out.position(),out.limit());
}
}
+ if (encoding==RfbProto.EncodingRaw) {
+ LinkedList outs = bufs;
+ inputIndex = 0;
+ while( inputIndex < outs.size()){
+ ByteBuffer out = outs.get(inputIndex++);
+ os.write(out.array(), out.position(), out.limit());
+ }
+ }
os.flush();
continue;
}
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/MyVncClient.java
--- a/src/myVncClient/MyVncClient.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/MyVncClient.java Fri Aug 05 19:46:51 2011 +0900
@@ -215,9 +215,8 @@
+ ":" + port, e);
} catch (EOFException e) {
- // window を消してnullを突っ込んでGCで削除させる。
vncFrame.setVisible(false);
- vncFrame = null;
+ vncFrame.dispose();
// num4
// リーダーの子ノードがproxyに対して親が落ちたことを報告をする
if (leaderflag != null) {
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/OptionNoFrame.java
--- a/src/myVncClient/OptionNoFrame.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/OptionNoFrame.java Fri Aug 05 19:46:51 2011 +0900
@@ -76,8 +76,9 @@
//
OptionsNoFrame(CuiMyVncClient v) {
- viewer = v;
-
+
+ viewer = v;
+/*
for (int i = 0; i < names.length; i++) {
labels[i] = new Label(names[i]);
@@ -143,12 +144,14 @@
}
}
}
+*/
// Make the booleans and encodings array correspond to the state of the GUI
- setEncodings();
- setColorFormat();
- setOtherOptions();
+// setEncodings();
+// setColorFormat();
+// setOtherOptions();
+
}
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/RfbProto.java
--- a/src/myVncClient/RfbProto.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/RfbProto.java Fri Aug 05 19:46:51 2011 +0900
@@ -176,6 +176,9 @@
// private boolean closed;
protected boolean closed;
+ public RfbProto(){
+ }
+
//
// Constructor. Make TCP connection to RFB server.
//
diff -r d19913a42a36 -r 4225c2fd3e16 src/myVncClient/VncCanvas.java
--- a/src/myVncClient/VncCanvas.java Fri Aug 05 17:26:45 2011 +0900
+++ b/src/myVncClient/VncCanvas.java Fri Aug 05 19:46:51 2011 +0900
@@ -424,8 +424,6 @@
for (int i = 0; i < rfb.updateNRects; i++) {
rfb.readFramebufferUpdateRectHdr();
- System.out.println("encoding = "+rfb.updateRectEncoding);
-
statNumTotalRects++;
int rx = rfb.updateRectX, ry = rfb.updateRectY;