diff src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java @ 505:af958194248b

change replyToRootSearchMulticast
author oshiro
date Mon, 18 Feb 2019 18:46:23 +0900
parents 432e2967eaab
children 3fe7e1a372df
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java	Mon Feb 18 18:33:48 2019 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java	Mon Feb 18 18:46:23 2019 +0900
@@ -1,18 +1,24 @@
 package jp.ac.u_ryukyu.treevnc;
 
 import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand;
+import com.glavsoft.rfb.protocol.ReceiverTask;
+import com.glavsoft.transport.Reader;
 import com.glavsoft.viewer.ViewerInterface;
 import com.glavsoft.viewer.swing.ConnectionParams;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.*;
 
+import static com.glavsoft.rfb.protocol.ReceiverTask.FRAMEBUFFER_UPDATE;
+
 public class TreeRootFinderListener implements Runnable {
     public static final String Ipv4McastAddr = "224.0.0.1";
     public static final String Ipv6McastAddr = "ff02::1";
     public static String McastAddr = Ipv4McastAddr;
 
 	static final int BufSize = 1024;
+	private ReceiverTask receiverTask;
 	private boolean stopFlag = false;
 	private ViewerInterface vps;
 	private MulticastSocket soc;
@@ -22,6 +28,11 @@
 		vps = vncProxyService;
 	}
 
+	public TreeRootFinderListener(ViewerInterface vncProxyService, ReceiverTask receiverTask) {
+		vps = vncProxyService;
+		this.receiverTask = receiverTask;
+	}
+
     public static MulticastSocket createMulticastSocket() throws IOException {
         MulticastSocket soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_ROOT_FINDER);
 		try {
@@ -53,20 +64,22 @@
 				String hostname = recvPacket.getAddress().getHostAddress();
 		        byte[] reply = recvPacket.getData();
 				int len = recvPacket.getLength();
-				if (len != 12) {
-					continue;
-				}
-				if ((reply[0]&0xff) != TreeCommand.FIND_ROOT.cmd) {
-					continue;
+				if (len == 12 && (reply[0] & 0xff) == TreeCommand.FIND_ROOT.cmd) {
+					int port = reply[8];
+					port = port * 256 + reply[9];
+					port = port * 256 + reply[10];
+					port = port * 256 + reply[11];
+
+					TreeVncProtocol t = new TreeVncProtocol(hostname, port);
+					t.findRootReply(vps.getRfb().getAcceptPort());
+				} else {
+					if (receiverTask != null) {
+						receiverTask.setReader(new Reader(new ByteArrayInputStream(reply)));
+						if (receiverTask.getMessageId() == FRAMEBUFFER_UPDATE) {
+							receiverTask.framebufferUpdateMessage();
+						}
+					}
 				}
-				int port = reply[8];
-				port = port * 256 + reply[9];
-				port = port * 256 + reply[10];
-				port = port * 256 + reply[11];
-				
-				TreeVncProtocol t = new TreeVncProtocol(hostname, port);
-                t.findRootReply(vps.getRfb().getAcceptPort());
-				if(stopFlag) break;
 			}
 		} catch (Exception e) {
             System.out.println("tree-root-find-listener :" + e.getMessage());