# HG changeset patch # User e085711 # Date 1303796928 -32400 # Node ID 13d4d3118cb8d01c45a0fff93a0754ad4b93790c # Parent 0aa0e0bd742cc58c2139780a691fc2ca85ecb73b create rfb.cliListTmp diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/MyRfbProto.java --- a/src/myVncProxy/MyRfbProto.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/MyRfbProto.java Tue Apr 26 14:48:48 2011 +0900 @@ -26,22 +26,29 @@ private int rectW; private int rectH; private int encoding; + private int zLen; private ServerSocket servSock; private int acceptPort; private byte initData[]; + private LinkedList cliListTmp; private LinkedList cliList; + boolean createBimgFlag; byte[] pngBytes; MyRfbProto(String h, int p, VncViewer v ) throws IOException { super(h, p, v); cliList = new LinkedList (); + cliListTmp = new LinkedList (); + createBimgFlag = false; } MyRfbProto(String h, int p) throws IOException { super(h, p); cliList = new LinkedList (); + cliListTmp = new LinkedList (); + createBimgFlag = false; } void initServSock(int port) throws IOException{ @@ -76,6 +83,9 @@ void addSock(Socket sock){ cliList.add(sock); } + void addSockTmp(Socket sock){ + cliListTmp.add(sock); + } void mark(int len) throws IOException { is.mark(len); @@ -140,8 +150,6 @@ } void sendData(byte b[]){ - - try{ for(Socket cli : cliList){ try{ @@ -154,7 +162,27 @@ // System.out.println("cliSize="+cliSize()); }catch(Exception e){ } - } + } + + void sendPngImage(){ + try{ + for(Socket cli : cliListTmp){ + try{ + sendPngData(cli); + addSock(cli); + }catch(IOException e){ + // if socket closed + cliListTmp.remove(cli); + } + } +// System.out.println("cliSize="+cliSize()); + }catch(Exception e){ + } + cliListTmp.clear(); + } + + + boolean ready() throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(is)); return br.ready(); @@ -176,7 +204,7 @@ sendData(buffer); } void regiFramebufferUpdate()throws IOException{ - mark(16); + mark(20); messageType = readU8(); skipBytes(1); rectangles = readU16(); @@ -184,7 +212,9 @@ rectY = readU16(); rectW = readU16(); rectH = readU16(); - encoding = readU32(); + encoding = readU32(); + if(encoding == 16) + zLen = readU32(); reset(); } void checkAndMark() throws IOException{ @@ -192,13 +222,16 @@ case RfbProto.EncodingRaw: mark(rectW * rectH * 4 + 16); break; + case RfbProto.EncodingZRLE: + mark(zLen); + break; default: - mark(1000000); + mark(1000000);//適当 } } BufferedImage createBufferedImage(Image img){ BufferedImage bimg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB ); - + Graphics g = bimg.getGraphics(); g.drawImage(img, 0, 0, null); g.dispose(); @@ -224,13 +257,6 @@ } void sendPngData(Socket sock)throws IOException{ - System.out.println("pngBytes.length="+pngBytes.length); - -// ByteBuffer length = ByteBuffer.allocate(4); -// length.putInt(pngBytes.length); - -// byte b = 1; -// sock.getOutputStream().write(b); byte[] dataLength = castIntByte(pngBytes.length); sock.getOutputStream().write(dataLength); sock.getOutputStream().write(pngBytes); diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/ProxyVncCanvas.java --- a/src/myVncProxy/ProxyVncCanvas.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/ProxyVncCanvas.java Tue Apr 26 14:48:48 2011 +0900 @@ -79,6 +79,7 @@ // True if we process keyboard and mouse events. boolean inputEnabled; + // @@ -93,7 +94,7 @@ maxHeight = maxHeight_; rfb = viewer.rfb; - + tightInflaters = new Inflater[4]; cm8 = new DirectColorModel(8, 7, (7 << 3), (3 << 6)); @@ -538,11 +539,19 @@ } bufSize = (int)rfb.getNumBytesRead() - bufSize; - System.out.println("bufSize="+bufSize); +// System.out.println("bufSize="+bufSize); rfb.bufResetSend(bufSize); - bimg = createBufferedImage(rawPixelsImage); - rfb.createPngBytes(bimg); + if(rfb.createBimgFlag){ + bimg = createBufferedImage(rawPixelsImage); + //bimg(BufferedImage) -> rfb.pngBytes(byte[]) + rfb.createPngBytes(bimg); + rfb.sendPngImage(); + rfb.createBimgFlag = false; + + + } + /* boolean result = false; try{ diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/VncCanvas.java --- a/src/myVncProxy/VncCanvas.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/VncCanvas.java Tue Apr 26 14:48:48 2011 +0900 @@ -101,7 +101,7 @@ // True if we process keyboard and mouse events. boolean inputEnabled; - + // // The constructors. // @@ -115,7 +115,7 @@ rfb = viewer.rfb; scalingFactor = viewer.options.scalingFactor; - + tightInflaters = new Inflater[4]; cm8 = new DirectColorModel(8, 7, (7 << 3), (3 << 6)); @@ -398,8 +398,6 @@ } catch (IOException e) { } */ - Thread accept = new Thread(new acceptThread(rfb)); - accept.start(); while (true) { @@ -566,16 +564,20 @@ System.out.println("bufSize="+bufSize); rfb.bufResetSend((int)bufSize); - bimg = createBufferedImage(rawPixelsImage); - rfb.createPngBytes(bimg); - - boolean result = false; - try{ - result = ImageIO.write(bimg, "png", new File("sample.png")); - }catch(Exception e){ - e.printStackTrace(); - result = false; + if(rfb.createBimgFlag){ + bimg = createBufferedImage(rawPixelsImage); + rfb.createPngBytes(bimg); + createBimgFlag = false; + boolean result = false; + try{ + result = ImageIO.write(bimg, "png", new File("sample.png")); + }catch(Exception e){ + e.printStackTrace(); + result = false; + } } + + } } diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/VncProxyService.java --- a/src/myVncProxy/VncProxyService.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/VncProxyService.java Tue Apr 26 14:48:48 2011 +0900 @@ -18,6 +18,7 @@ // RfbProto rfb; MyRfbProto rfb; Thread rfbThread; + Thread accThread; Frame vncFrame; Container vncContainer; @@ -81,8 +82,8 @@ rfbThread = new Thread(this); rfbThread.start(); - Thread accept = new Thread(new acceptThread(rfb, vc)); - accept.start(); + accThread = new Thread(new acceptThread(rfb)); + accThread.start(); } diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/VncViewer.java --- a/src/myVncProxy/VncViewer.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/VncViewer.java Tue Apr 26 14:48:48 2011 +0900 @@ -60,6 +60,7 @@ // RfbProto rfb; MyRfbProto rfb; Thread rfbThread; + Thread accThread; Frame vncFrame; Container vncContainer; @@ -135,6 +136,8 @@ rfbThread = new Thread(this); rfbThread.start(); + accThread = new Thread(new acceptThread(rfb)); + accThread.start(); } public void update(Graphics g) { diff -r 0aa0e0bd742c -r 13d4d3118cb8 src/myVncProxy/acceptThread.java --- a/src/myVncProxy/acceptThread.java Tue Apr 26 09:08:49 2011 +0900 +++ b/src/myVncProxy/acceptThread.java Tue Apr 26 14:48:48 2011 +0900 @@ -4,29 +4,19 @@ public class acceptThread implements Runnable { MyRfbProto rfb; - ProxyVncCanvas pvc; - VncCanvas vc; byte[] imageBytes; - + acceptThread(MyRfbProto _rfb ) { rfb = _rfb; } - acceptThread(MyRfbProto _rfb, ProxyVncCanvas _vc ) { - rfb = _rfb; - pvc = _vc; - } - acceptThread(MyRfbProto _rfb, VncCanvas _vc ) { - rfb = _rfb; - vc = _vc; - } public void run() { rfb.selectPort(); while (true) { try { Socket newCli = rfb.accept(); rfb.sendInitData(newCli); - rfb.sendPngData(newCli); - rfb.addSock(newCli); + rfb.createBimgFlag = true; + rfb.addSockTmp(newCli); } catch (IOException e) { e.printStackTrace(); System.out.println(e);