# HG changeset patch # User Shinji KONO # Date 1550643882 -32400 # Node ID 89f1f7e4183831e796bbc8d478b57970786ae5c7 # Parent 3fe7e1a372dfc42161c21fedcee0d09293357d88 broadcast FrameBufferUpdate Rectangle diff -r 3fe7e1a372df -r 89f1f7e41838 src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java Tue Feb 19 15:59:50 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java Wed Feb 20 15:24:42 2019 +0900 @@ -8,6 +8,7 @@ import com.glavsoft.viewer.swing.ConnectionParams; public class CreateConnectionParam { + private final FindRoot getBcast; private String hostName; private int portNumber = ConnectionParams.DEFAULT_VNC_ROOT; private TreeRFBProto rfb; @@ -19,10 +20,11 @@ public CreateConnectionParam(TreeRFBProto rfb) { this.rfb = rfb; rfb.setConnectionParam(this); + getBcast = new FindRoot(rfb.acceptPort,this); + rfb.setFindRoot(getBcast); } public synchronized void findTreeVncRoot() { - FindRoot getBcast = new FindRoot(rfb.acceptPort,this); rfb.createRootSelectionPanel(this, getBcast); getBcast.findRoot(); // wait for RootSelection diff -r 3fe7e1a372df -r 89f1f7e41838 src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java Tue Feb 19 15:59:50 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java Wed Feb 20 15:24:42 2019 +0900 @@ -119,7 +119,6 @@ } else { lostChildNodeNum = (lostChildNode.getTreeNum() * treebranch) + clientId + 1; } - TreeVNCNode deadChild; fixLostChild1(lostChildNodeNum); } diff -r 3fe7e1a372df -r 89f1f7e41838 src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java Tue Feb 19 15:59:50 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java Wed Feb 20 15:24:42 2019 +0900 @@ -22,6 +22,7 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.DataFormatException; import java.util.zip.Deflater; @@ -33,7 +34,10 @@ protected final static int FramebufferUpdate = 0; protected ProtocolContext context; private int clients = 0; + public MulticastQueue> multicastqueue = new MulticastQueue>(); + public static MulticastQueue> broadcastqueue = new MulticastQueue>(); // singleton + public FindRoot findRoot; public int acceptPort = 0; private String myAddress; private long counter = 0; // packet serial number @@ -77,6 +81,7 @@ private ByteBuffer c1; private FramebufferUpdateRectangle c1rect; private int c1headerPos; + private boolean stopBroadcast; public TreeRFBProto(boolean isTreeManager, ViewerInterface viewer) { nets.setMyRfb(this); @@ -305,7 +310,7 @@ public void run() { writerRunning.set(1); try { - requestThreadNotify(); // send full screen request via fullScreenRequestThread + // requestThreadNotify(); // send full screen request via fullScreenRequestThread // after this, we discard upward packet. new Thread(reader, "upward-packet-processing").start(); @@ -813,7 +818,11 @@ c1.flip(); LinkedList bufs = new LinkedList(); bufs.add(c1); - multicastqueue.waitput(bufs); + if (isTreeManager && connectionPresenter.isUseMulticast()) { + for(ByteBuffer buf : bufs) + findRoot.multicastUpdateRectangle(buf); + } else + multicastqueue.waitput(bufs); } public LinkedList createCheckDelayHeader(LinkedList checkDelay, ByteBuffer header) { @@ -1030,4 +1039,7 @@ this.sharingId = sharingId; } + public void setFindRoot(FindRoot findRoot) { + this.findRoot = findRoot; + } } \ No newline at end of file diff -r 3fe7e1a372df -r 89f1f7e41838 src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java Tue Feb 19 15:59:50 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java Wed Feb 20 15:24:42 2019 +0900 @@ -30,10 +30,6 @@ isTreeRoot = vps.getRfb().isTreeManager(); } - public TreeRootFinderListener(ViewerInterface vncProxyService, ReceiverTask receiverTask) { - this.receiverTask = receiverTask; - } - public static MulticastSocket createMulticastSocket() throws IOException { MulticastSocket soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_ROOT_FINDER); try { @@ -73,7 +69,7 @@ TreeVncProtocol t = new TreeVncProtocol(hostname, port); t.findRootReply(vps.getRfb().getAcceptPort()); - } else if (receiverTask != null) { + } else if (receiverTask != null && !vps.getRfb().isTreeManager()) { receiverTask.setReader(new Reader(new ByteArrayInputStream(reply))); if (receiverTask.getMessageId() == FRAMEBUFFER_UPDATE) { receiverTask.framebufferUpdateMessage(); @@ -97,4 +93,8 @@ public boolean isStopFlag() { return stopFlag; } + + public MulticastSocket getSocket() { + return soc; + } } diff -r 3fe7e1a372df -r 89f1f7e41838 src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Tue Feb 19 15:59:50 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Wed Feb 20 15:24:42 2019 +0900 @@ -94,5 +94,12 @@ return interfaces.get(intf); } - + + public boolean hasBroadCastNode() { + for(String intf : interfaces.keySet()) { + if (interfaces.get(intf).getList().isEmpty()!=true) + return true; + } + return false; + } }