changeset 50:225e3873d75f

Modified to be able to specify the region of the screen in the argument.
author one
date Tue, 09 Jul 2013 18:08:16 +0900
parents b0c7fad4c695
children eb34277a22ff
files dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java src/main/java/com/glavsoft/rfb/protocol/Protocol.java src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java
diffstat 5 files changed, 68 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
Binary file dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar has changed
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java	Tue Jun 18 19:15:21 2013 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java	Tue Jul 09 18:08:16 2013 +0900
@@ -43,6 +43,7 @@
 	public int width;
 	public int height;
     private EncodingType encodingType;
+    private boolean firstFlag=false;
 
 	public FramebufferUpdateRectangle() {
 		// nop
@@ -56,8 +57,14 @@
 	public void fill(Reader reader) throws TransportException {
     	x = reader.readUInt16();
         y = reader.readUInt16();
-        width = reader.readUInt16();
-        height = reader.readUInt16();
+        if(!firstFlag) {	
+        	width = reader.readUInt16()-2;
+        	height = reader.readUInt16()-2;
+        	firstFlag=true;
+        } else {
+        	width = reader.readUInt16();
+        	height = reader.readUInt16();
+        }
         int encoding = reader.readInt32();
 		encodingType = EncodingType.byId(encoding);
     }
--- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Tue Jun 18 19:15:21 2013 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Tue Jul 09 18:08:16 2013 +0900
@@ -67,6 +67,7 @@
 	private Thread senderThread;
 	private Thread receiverThread;
 	private byte[] initData;
+	private boolean isRetina = false;
 
 	public Protocol(Reader reader, Writer writer,
 			IPasswordRetriever passwordRetriever, ProtocolSettings settings) {
@@ -78,7 +79,7 @@
 		decoders.instantiateDecodersWhenNeeded(settings.encodings);
 		state = new HandshakeState(this);
 	}
-
+	
 	@Override
 	public void changeStateTo(ProtocolState state) {
 		this.state = state;
@@ -117,19 +118,17 @@
 
 	@Override
 	public int getFbWidth() {
-		//return 1000;
 		return fbWidth;
 	}
 
 	@Override
 	public void setFbWidth(int fbWidth) {
-		// this.fbWidth = 1002;
-		this.fbWidth = fbWidth;
+		if(!isRetina)
+			this.fbWidth = fbWidth;
 	}
 
 	@Override
 	public int getFbHeight() {
-		//return 500;
 		return fbHeight;
 	}
 
@@ -145,8 +144,8 @@
 	
 	@Override
 	public void setFbHeight(int fbHeight) {
-		// this.fbHeight = 502;
-		 this.fbHeight = fbHeight;
+		if(!isRetina)
+			this.fbHeight = fbHeight;
 	}
 
 	@Override
@@ -265,8 +264,8 @@
 
 	@Override
 	public void sendRefreshMessage() {
-		// sendMessage(new FramebufferUpdateRequestMessage(0, 0, fbWidth, fbHeight, false));
-		sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1000, 500, false));
+//	    sendMessage(new FramebufferUpdateRequestMessage(0, 0, fbWidth, fbHeight, false));
+		sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1006, 506, false));
 		logger.fine("sent: full FB Refresh");
 	}
 
@@ -361,4 +360,9 @@
 		receiverThread.start();
 	}
 	
+	public void setScreenSizeRetina(int fbWidth, int fbHeight) {
+		isRetina = true;
+		this.fbWidth = fbWidth;
+		this.fbHeight = fbHeight;
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Tue Jun 18 19:15:21 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Tue Jul 09 18:08:16 2013 +0900
@@ -57,7 +57,8 @@
 
 	private VncProxyService prevVps;
 	static VncProxyService currentVps;
-
+	private int fbWidth = 0;
+	private int fbHeight = 0;
 	// public AcceptClient acc;
 
 	private void initProxy(Parser parser) {
@@ -97,7 +98,7 @@
 		String[] mainArgs = argv;
 		System.out.println(mainArgs.length);
 		// input into arguments Decision
-
+		
 		Parser parser = new Parser();
 		ParametersHandler.completeParserOptions(parser);
 
@@ -167,6 +168,8 @@
 						new PasswordChooser(passwordFromParams,
 								connectionParams, containerFrame, this),
 						settings);
+				if(fbWidth!=0)
+					workingProtocol.setScreenSizeRetina(fbWidth, fbHeight);
 				workingProtocol.handshake();
 				rfb.setProtocolContext(workingProtocol);
 				// input into change parents
@@ -245,16 +248,22 @@
 		thread = new Thread(getCast);
 		thread.start();
 	}
+	
 
+	public void proxyStart(String[] argv,int width,int height) {
+		fbWidth = width;
+		fbHeight = height;
+		proxyStart(argv);
+	}
+	
 	public void proxyStart(String[] argv) {
 		String[] mainArgs = argv;
 		System.out.println(mainArgs.length);
 		// input into arguments Decision
-
 		Parser parser = new Parser();
 		ParametersHandler.completeParserOptions(parser);
-
-		parser.parse(argv);
+		if(fbWidth==0)
+			parser.parse(argv);
 		if (parser.isSet(ParametersHandler.ARG_HELP)) {
 			printUsage(parser.optionsUsage());
 			System.exit(0);
--- a/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java	Tue Jun 18 19:15:21 2013 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java	Tue Jul 09 18:08:16 2013 +0900
@@ -6,6 +6,8 @@
 public class TreeViewer {
 	private boolean treeProxy;
 	private boolean viewer;
+	private int width;
+	private int height;
 
 	public static void main(String[] args) {
 		new TreeViewer().vncStart(args);
@@ -15,7 +17,7 @@
 		modeSelect(args);
 		if (treeProxy) {
 			VncProxyService vps = new VncProxyService();
-			vps.proxyStart(args);
+			vps.proxyStart(args,width,height);
 		} else if (viewer) {
 			Viewer v = new Viewer();
 			v.startViewer(args);
@@ -33,12 +35,38 @@
 				viewer = true;
 			} else if ("-r".equals(args[i])) {
 				treeProxy = true;
+			} else if ("-retina".equals(args[i])) {
+				treeProxy = true;
+				if(getParameter(args,i))
+					i = i + 2;
 			} else {
 				System.out.println("(default) TreeVNCClient\n"
-								+ "-p       TreeVNCProxy\n"
-								+ "-v       VNCViewer\n"
-								+ "-r      TreeVNCProxy for RemoteHost. you should input parameter host and port");
+								+ "-p:       TreeVNCProxy\n"
+								+ "-v:      VNCViewer\n"
+								+ "-r:      TreeVNCProxy for RemoteHost. you should input parameter host and port\n"
+								+ "-retina whidth heght:    TreeVNC proxy for retina.this mode can select screen range.");
 			}
 		}
 	}
+	
+	private boolean getParameter(String[] args, int i) {
+		if(isInteger(args[++i])&&isInteger(args[++i])) {
+			width = Integer.parseInt(args[--i]);
+			height = Integer.parseInt(args[++i]);
+			return true;
+		} else {
+			width = 1920;
+			height = 1080;
+			return false;
+		}
+	}
+	
+	private boolean isInteger(String num) {
+		try {
+			int n = Integer.parseInt(num);
+			return true;
+		} catch (NumberFormatException e) {
+			return false;
+		}
+	}
 }