changeset 10:2840c7a259f1

add acceptThread
author e085711
date Sat, 16 Apr 2011 02:21:09 +0900
parents c0ad3ecdf827
children 2869ca1579ae
files src/MyRfbProto.java src/VncCanvas.java src/VncViewer.java src/acceptThread.java
diffstat 4 files changed, 146 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/MyRfbProto.java	Sat Apr 16 02:21:09 2011 +0900
@@ -0,0 +1,108 @@
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.nio.ByteBuffer;
+import java.util.LinkedList;
+
+
+class MyRfbProto extends RfbProto {
+
+	private ServerSocket servSock; 	
+	private byte initData[];
+	private LinkedList <Socket> cliList;
+	boolean MYVNC = true;
+	
+	
+	MyRfbProto(String h, int p, VncViewer v) throws IOException {
+		super(h, p, v);
+		cliList = new LinkedList <Socket>();
+	}
+
+	void initServSock(int port) throws IOException{
+		servSock = new ServerSocket(port);
+	}
+
+	void setSoTimeout(int num) throws IOException {
+		servSock.setSoTimeout(num);
+	}
+	
+	Socket accept() throws IOException {
+		return servSock.accept();
+	}
+
+	void addSock(Socket sock){
+		cliList.add(sock);
+	}
+	
+	void mark(int len) throws IOException {
+		is.mark(len);
+	}
+
+	void reset() throws IOException {
+		is.reset();
+	}
+
+	boolean markSupported() {
+		return is.markSupported();
+	}
+	
+	void readServerInit() throws IOException {
+		
+		mark(255);
+		skipBytes(20);
+		int nlen = readU32();
+		int blen = 20+4+nlen;
+		initData = new byte[blen];
+		reset();
+
+		mark(blen);
+		readFully(initData);
+		reset();
+		
+		framebufferWidth = readU16();
+		framebufferHeight = readU16();
+		bitsPerPixel = readU8();
+		depth = readU8();
+		bigEndian = (readU8() != 0);
+		trueColour = (readU8() != 0);
+		redMax = readU16();
+		greenMax = readU16();
+		blueMax = readU16();
+		redShift = readU8();
+		greenShift = readU8();
+		blueShift = readU8();
+		byte[] pad = new byte[3];
+		readFully(pad);
+		int nameLength = readU32();
+		byte[] name = new byte[nameLength];
+		readFully(name);
+		desktopName = new String(name);
+
+		// Read interaction capabilities (TightVNC protocol extensions)
+		if (protocolTightVNC) {
+			int nServerMessageTypes = readU16();
+			int nClientMessageTypes = readU16();
+			int nEncodingTypes = readU16();
+			readU16();
+			readCapabilityList(serverMsgCaps, nServerMessageTypes);
+			readCapabilityList(clientMsgCaps, nClientMessageTypes);
+			readCapabilityList(encodingCaps, nEncodingTypes);
+		}
+
+		inNormalProtocol = true;
+	}
+
+	void sendInitData(Socket sock) throws IOException{
+			sock.getOutputStream().write(initData);
+	}
+
+	void sendData(byte b[]) throws IOException{
+		for(Socket cli : cliList)
+			cli.getOutputStream().write(b, 0, b.length);		
+	}	
+
+	int cliSize(){
+		return cliList.size();
+	}	
+	
+}
--- a/src/VncCanvas.java	Sat Apr 16 01:19:18 2011 +0900
+++ b/src/VncCanvas.java	Sat Apr 16 02:21:09 2011 +0900
@@ -379,9 +379,11 @@
 
 		long count = 0;
 
+/*
+		Thread accept = new Thread(new acceptThread(rfb));
+		accept.start();
+*/
 		while (true) {
-			rfb.accept();
-			
 			
 			if (rfb.MYVNC) {
 				if (rfb.cliSize() > 0) {
--- a/src/VncViewer.java	Sat Apr 16 01:19:18 2011 +0900
+++ b/src/VncViewer.java	Sat Apr 16 02:21:09 2011 +0900
@@ -56,7 +56,7 @@
 
 	String[] mainArgs;
 
-//	RfbProto rfb;
+	// RfbProto rfb;
 	MyRfbProto rfb;
 	Thread rfbThread;
 
@@ -325,7 +325,7 @@
 
 		showConnectionStatus("Connecting to " + host + ", port " + port + "...");
 
-//		rfb = new RfbProto(host, port, this);
+		// rfb = new RfbProto(host, port, this);
 		rfb = new MyRfbProto(host, port, this);
 		showConnectionStatus("Connected to server");
 
@@ -449,8 +449,16 @@
 
 		if (rfb.MYVNC) {
 			rfb.initServSock(5550);
-			rfb.setSoTimeout(10);
-//			rfb.accept();
+			// rfb.setSoTimeout(10);
+
+			try {
+				Socket newCli = rfb.accept();
+				rfb.sendInitData(newCli);
+				rfb.addSock(newCli);
+			} catch (IOException e) {
+			}
+
+
 		}
 
 		System.out.println("Desktop name is " + rfb.desktopName);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/acceptThread.java	Sat Apr 16 02:21:09 2011 +0900
@@ -0,0 +1,22 @@
+import java.net.Socket;
+import java.io.IOException;
+
+public class acceptThread implements Runnable {
+	MyRfbProto rfb;
+
+	acceptThread(MyRfbProto _rfb) {
+		rfb = _rfb;
+	}
+
+	public void run() {
+		while (true) {
+			try {
+				Socket newCli = rfb.accept();
+				rfb.sendInitData(newCli);
+				rfb.addSock(newCli);
+			} catch (IOException e) {
+
+			}
+		}
+	}
+}