Mercurial > hg > Members > riono > TreeVNC_ja_comment
comparison src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java @ 448:344a35b7c47f
send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 18 Jun 2016 20:09:46 +0900 |
parents | 3996fde6f8ed |
children | d5bcae14c2cd |
comparison
equal
deleted
inserted
replaced
447:3996fde6f8ed | 448:344a35b7c47f |
---|---|
44 import java.io.PrintWriter; | 44 import java.io.PrintWriter; |
45 import java.io.StringWriter; | 45 import java.io.StringWriter; |
46 import java.io.UnsupportedEncodingException; | 46 import java.io.UnsupportedEncodingException; |
47 import java.util.LinkedList; | 47 import java.util.LinkedList; |
48 import java.util.Timer; | 48 import java.util.Timer; |
49 import java.util.TimerTask; | |
50 import java.util.logging.Logger; | 49 import java.util.logging.Logger; |
51 | 50 |
52 | 51 |
53 public class ReceiverTask implements Runnable { | 52 public class ReceiverTask implements Runnable { |
54 private static final byte FRAMEBUFFER_UPDATE = 0; | 53 private static final byte FRAMEBUFFER_UPDATE = 0; |
86 | 85 |
87 Decoder decoder = new ZRLEESender(rfb); | 86 Decoder decoder = new ZRLEESender(rfb); |
88 decoders.setDecoderByType(EncodingType.ZLIB, decoder); | 87 decoders.setDecoderByType(EncodingType.ZLIB, decoder); |
89 decoders.setDecoderByType(EncodingType.ZRLE, decoder); | 88 decoders.setDecoderByType(EncodingType.ZRLE, decoder); |
90 decoders.setDecoderByType(EncodingType.ZRLEE, decoder); | 89 decoders.setDecoderByType(EncodingType.ZRLEE, decoder); |
91 | 90 if(rfb.fixingSize) { |
91 context.setFbWidth(rfb.fixingSizeWidth); | |
92 context.setFbHeight(rfb.fixingSizeHeight); | |
93 } | |
92 if(!rfb.getCuiVersion()) { | 94 if(!rfb.getCuiVersion()) { |
93 if (rfb.filterSingleDisplay) { | 95 renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); |
94 renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); | 96 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth, rfb.frameSizeHeight, false); |
95 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rfb.getSingleWidth(), rfb.getSingleHeight(), false); | |
96 } else { | |
97 renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); | |
98 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), false); | |
99 } | |
100 } | 97 } |
101 if(rfb.isTreeManager()) { | 98 if(rfb.isTreeManager()) { |
102 fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest(); | 99 fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest(); |
103 connectionFinished(); | 100 connectionFinished(); |
104 if(rfb.fixingSize) { | |
105 timer = new Timer("framebufferUpdate-request-timer", true); | |
106 timer.schedule(new TimerTask() { | |
107 @Override | |
108 public void run() { | |
109 context.setFbWidth(rfb.fixingSizeWidth); | |
110 context.setFbHeight(rfb.fixingSizeHeight); | |
111 context.sendMessage(new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), true)); | |
112 } | |
113 }, 0, 100); | |
114 } | |
115 } | 101 } |
116 } | 102 } |
117 | 103 |
118 @Override | 104 @Override |
119 public void run() { | 105 public void run() { |
287 } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) { | 273 } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) { |
288 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false); | 274 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false); |
289 rfb.setCuiVersion(false); | 275 rfb.setCuiVersion(false); |
290 renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); | 276 renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); |
291 if (rfb.hasViewer()){ | 277 if (rfb.hasViewer()){ |
292 setScreenParameter(); | 278 setScreenParameter(rect,rect.width,rect.height); |
293 } | 279 } |
294 } else if (rect.getEncodingType() == EncodingType.INIT_DATA) { | 280 } else if (rect.getEncodingType() == EncodingType.INIT_DATA) { |
295 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false); | 281 fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false); |
296 rfb.setCuiVersion(false); | 282 rfb.setCuiVersion(false); |
297 // VNCServer is changed, initiarize new screen. | 283 // VNCServer is changed, initiarize new screen. |
298 int length = reader.readInt32() - 2; | 284 int length = reader.readInt32() - 6; |
299 short id = reader.readInt16(); | 285 short id = reader.readInt16(); |
286 int singleWidth = reader.readUInt16(); | |
287 int singleHeight = reader.readUInt16(); | |
300 byte[] initData = new byte[length]; | 288 byte[] initData = new byte[length]; |
301 reader.read(initData); | 289 reader.read(initData); |
302 String name = new String(initData, 24, length - 24, "UTF-8"); | 290 String name = new String(initData, 24, length - 24, "UTF-8"); |
303 context.setRemoteDesktopName(name); | 291 context.setRemoteDesktopName(name); |
304 context.setInitData(initData); | 292 context.setInitData(initData); |
308 context.setY(rect.y); | 296 context.setY(rect.y); |
309 repaintController.updateRemoteDesktopName(context); | 297 repaintController.updateRemoteDesktopName(context); |
310 reader.reset(); | 298 reader.reset(); |
311 // All children multicastqueue should be discarded here. | 299 // All children multicastqueue should be discarded here. |
312 // rfb.clearChildrenTransmission(); | 300 // rfb.clearChildrenTransmission(); |
313 rfb.readSendData(length + 20 + 2, reader, null, rect); // size of UpdateRectangleMessage with initData. | 301 rfb.readSendData(length + 16 + 10, reader, null, rect); // size of UpdateRectangleMessage with initData. |
314 if (!(rfb.getCuiVersion())) { | 302 if (!(rfb.getCuiVersion())) { |
315 renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); | 303 renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); |
316 } | 304 } |
317 repaintController.setVisible(id != rfb.getId()); | 305 repaintController.setVisible(id != rfb.getId()); |
318 if (rfb.hasViewer()){ | 306 if (rfb.hasViewer()){ |
319 setScreenParameter(); | 307 setScreenParameter(rect,singleWidth,singleHeight); |
320 } | 308 } |
321 } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) { | 309 } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) { |
322 int checkDelaySize = 24; | 310 int checkDelaySize = 24; |
323 int port = rfb.acceptPort; | 311 int port = rfb.acceptPort; |
324 String address = rfb.getMyAddress(); | 312 String address = rfb.getMyAddress(); |
356 if (rfb.isTreeManager()) { | 344 if (rfb.isTreeManager()) { |
357 sendFrameBufferUpdateRequest(); | 345 sendFrameBufferUpdateRequest(); |
358 } | 346 } |
359 } | 347 } |
360 | 348 |
361 private void setScreenParameter() { | 349 private void setScreenParameter(FramebufferUpdateRectangle rect,int singleWidth ,int singleHeight) { |
362 ViewerInterface v = rfb.getViewer(); | 350 ViewerInterface v = rfb.getViewer(); |
351 rfb.setSingleDisplaySize(singleWidth,singleHeight); | |
363 ConnectionPresenter cp = v.getConnectionPresenter(); | 352 ConnectionPresenter cp = v.getConnectionPresenter(); |
364 cp.setX(rfb.getX()); | 353 cp.setX(rect.x); |
365 cp.setY(rfb.getY()); | 354 cp.setY(rect.y); |
366 cp.setFrameSizeWidth(rfb.frameSizeWidth); | 355 cp.setFrameSizeWidth(rect.width); |
367 cp.setFrameSizeHeight(rfb.frameSizeHeight); | 356 cp.setFrameSizeHeight(rect.height); |
368 v.setFitScreen(); | 357 v.setFitScreen(); |
369 } | 358 } |
370 | 359 |
371 private void sendFrameBufferUpdateRequest() { | 360 private void sendFrameBufferUpdateRequest() { |
372 if (needSendPixelFormat) { | 361 if (needSendPixelFormat) { |