Mercurial > hg > Applications > TreeVNC
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());