comparison src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java @ 242:a640cd7001e1

fix checkdelay, and fix serial number option
author oc
date Mon, 13 Oct 2014 17:23:57 +0900
parents b21a7842a41d
children 0ed7719c1800
comparison
equal deleted inserted replaced
241:b21a7842a41d 242:a640cd7001e1
433 public void sendDesktopSizeChange(short id) { 433 public void sendDesktopSizeChange(short id) {
434 LinkedList<ByteBuffer> desktopSize = new LinkedList<ByteBuffer>(); 434 LinkedList<ByteBuffer> desktopSize = new LinkedList<ByteBuffer>();
435 int width = context.getFbWidth(); 435 int width = context.getFbWidth();
436 int height = context.getFbHeight(); 436 int height = context.getFbHeight();
437 desktopSize.add(new UpdateRectangleMessage(width, height, EncodingType.INIT_DATA, context.getInitData(),id).getMessage()); 437 desktopSize.add(new UpdateRectangleMessage(width, height, EncodingType.INIT_DATA, context.getInitData(),id).getMessage());
438 if (addSerialNum) { 438 addSerialNumber(desktopSize);
439 addSerialNumber(desktopSize);
440 }
441 multicastqueue.put(desktopSize); 439 multicastqueue.put(desktopSize);
442 } 440 }
443 441
444 442
445 public void addSerialNumber(LinkedList<ByteBuffer> bufs) { 443 public void addSerialNumber(LinkedList<ByteBuffer> bufs) {
446 ByteBuffer serialNum = multicastqueue.allocate(8); 444 ByteBuffer serialNum = multicastqueue.allocate(4+8); // addSerialNum flag + SerialNum
445 serialNum.putInt(1);
447 serialNum.putLong(counter++); 446 serialNum.putLong(counter++);
448 serialNum.flip(); 447 serialNum.flip();
449 bufs.addFirst(serialNum); 448 bufs.addFirst(serialNum);
450 } 449 }
451 450
563 */ 562 */
564 public void readSendData(int dataLen, Reader reader, byte[] bytes) 563 public void readSendData(int dataLen, Reader reader, byte[] bytes)
565 throws TransportException, UnsupportedEncodingException { 564 throws TransportException, UnsupportedEncodingException {
566 LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>(); 565 LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
567 ByteBuffer header = multicastqueue.allocate(16); 566 ByteBuffer header = multicastqueue.allocate(16);
568 ByteBuffer serial = multicastqueue.allocate(8); 567 ByteBuffer serial = multicastqueue.allocate(4+8);
569 if (!isTreeManager()) { 568 if (!isTreeManager()) {
570 reader.readBytes(serial.array(),0,8); 569 reader.readBytes(serial.array(),0,4+8);
571 serial.limit(8); 570 serial.limit(4+8);
572 } 571 }
573 reader.mark(dataLen); 572 reader.mark(dataLen);
574 reader.readBytes(header.array(), 0, 16); 573 reader.readBytes(header.array(), 0, 16);
575 header.limit(16); 574 header.limit(16);
576 if (header.get(0) == FramebufferUpdate) { 575 if (header.get(0) == FramebufferUpdate) {
603 ByteBuffer blen = multicastqueue.allocate(4); 602 ByteBuffer blen = multicastqueue.allocate(4);
604 blen.putInt(len2); 603 blen.putInt(len2);
605 blen.flip(); 604 blen.flip();
606 bufs.addFirst(blen); 605 bufs.addFirst(blen);
607 bufs.addFirst(header); 606 bufs.addFirst(header);
608 if (addSerialNum) { 607 addSerialNumber(bufs);
609 addSerialNumber(bufs);
610 }
611 multicastqueue.put(bufs); 608 multicastqueue.put(bufs);
612 } catch (DataFormatException e) { 609 } catch (DataFormatException e) {
613 throw new TransportException(e); 610 throw new TransportException(e);
614 } catch (IOException e) { 611 } catch (IOException e) {
615 throw new TransportException(e); 612 throw new TransportException(e);
623 ByteBuffer b = multicastqueue.allocate(dataLen - 16); 620 ByteBuffer b = multicastqueue.allocate(dataLen - 16);
624 reader.readBytes(b.array(), 0, dataLen - 16); 621 reader.readBytes(b.array(), 0, dataLen - 16);
625 b.limit(dataLen - 16); 622 b.limit(dataLen - 16);
626 bufs.add(b); 623 bufs.add(b);
627 } 624 }
628 if (addSerialNum) { 625 this.addSerialNumber(bufs);
629 this.addSerialNumber(bufs);
630 }
631 multicastqueue.put(bufs); 626 multicastqueue.put(bufs);
632 627
633 return; 628 return;
634 } 629 }
635 // It may be compressed. We can inflate here to avoid repeating clients 630 // It may be compressed. We can inflate here to avoid repeating clients