comparison src/myVncProxy/MyRfbProto.java @ 85:b384db76c28a

a little progress...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 03 Aug 2011 07:39:43 +0900
parents 704e01d2390c
children b7225991184b
comparison
equal deleted inserted replaced
84:704e01d2390c 85:b384db76c28a
560 for (;;) { 560 for (;;) {
561 LinkedList<byte[]> bufs = c.poll(); 561 LinkedList<byte[]> bufs = c.poll();
562 byte[] b = bufs.poll(); 562 byte[] b = bufs.poll();
563 if (b[0]==RfbProto.FramebufferUpdate) { 563 if (b[0]==RfbProto.FramebufferUpdate) {
564 int encoding = u32(b,12); 564 int encoding = u32(b,12);
565 int clen = u32(bufs.poll(),0);
566 if (encoding==RfbProto.EncodingZlib||encoding==RfbProto.EncodingZRLE) { 565 if (encoding==RfbProto.EncodingZlib||encoding==RfbProto.EncodingZRLE) {
566 int clen = u32(bufs.poll(),0);
567 LinkedList<byte[]> outs = new LinkedList<byte[]>(); 567 LinkedList<byte[]> outs = new LinkedList<byte[]>();
568 int len = 0, count = 0; 568 int len = 0, count = 0;
569 int len2=0; 569 int len2=0;
570 int bufSize = bufs.size(); 570 //int bufSize = bufs.size();
571 int bufCount = 0; 571 //int bufCount = 0;
572 for( byte[] b1 : bufs) { 572 deflater.reset();
573 if (++bufCount > bufSize) 573 do {
574 byte[] b1 = bufs.poll();
575 if (bufs.size()==0) {
574 deflater.setInput(b1,0,clen); 576 deflater.setInput(b1,0,clen);
575 else 577 deflater.finish();
578 } else
576 deflater.setInput(b1); 579 deflater.setInput(b1);
577 int len1=0; 580 int len1=0;
578 do { 581 do {
579 byte[] c1 = new byte[INFLATE_BUFSIZE]; 582 byte[] c1 = new byte[INFLATE_BUFSIZE];
580 len2 = len1; 583 len2 = len1;
583 outs.addLast(c1); 586 outs.addLast(c1);
584 count ++; 587 count ++;
585 len += len1; 588 len += len1;
586 } 589 }
587 } while (len1 > 0); 590 } while (len1 > 0);
588 } 591 } while(bufs.size()>0);
589 byte[] blen = castIntByte(len); 592 byte[] blen = castIntByte(len);
590 outs.addFirst(blen); 593 outs.addFirst(blen);
591 outs.addFirst(b); 594 outs.addFirst(b);
592 int i = 0; 595 int i = 0;
593 for(byte [] out: outs) { 596 for(byte [] out: outs) {
598 } 601 }
599 } 602 }
600 } else { 603 } else {
601 os.write(b, 0, b.length); 604 os.write(b, 0, b.length);
602 } 605 }
606 os.flush();
603 } 607 }
604 } catch (IOException e) { 608 } catch (IOException e) {
605 /** 609 /**
606 * if socket closed 610 * if socket closed
607 */ 611 */