changeset 510:89f1f7e41838

broadcast FrameBufferUpdate Rectangle
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 20 Feb 2019 15:24:42 +0900
parents 3fe7e1a372df
children 519d6f94edcc
files src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java
diffstat 5 files changed, 30 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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);
     }
 
--- 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<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
+    public static MulticastQueue<LinkedList<ByteBuffer>> broadcastqueue = new MulticastQueue<LinkedList<ByteBuffer>>(); // 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<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
         bufs.add(c1);
-        multicastqueue.waitput(bufs);
+        if (isTreeManager && connectionPresenter.isUseMulticast()) {
+            for(ByteBuffer buf : bufs)
+                findRoot.multicastUpdateRectangle(buf);
+        } else
+            multicastqueue.waitput(bufs);
     }
 
     public LinkedList<ByteBuffer> createCheckDelayHeader(LinkedList<ByteBuffer> checkDelay, ByteBuffer header) {
@@ -1030,4 +1039,7 @@
         this.sharingId = sharingId;
     }
 
+    public void setFindRoot(FindRoot findRoot) {
+        this.findRoot = findRoot;
+    }
 }
\ No newline at end of file
--- 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;
+	}
 }
--- 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;
+    }
 }