changeset 24:36a9a7de314d

root can receive message
author sugi
date Sat, 08 Nov 2014 10:57:01 +0900
parents edf1b800d8b9
children 6cb444e8e646
files src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java
diffstat 4 files changed, 72 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java	Fri Nov 07 17:48:48 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java	Sat Nov 08 10:57:01 2014 +0900
@@ -7,12 +7,31 @@
 @Message
 public class ChangeRequestMessage {
 
+    public int messageID;
     public List<String> route;
     public boolean changeServer = false;
-    public String requestNodeName;
+    public String name;
 
     public ChangeRequestMessage(){
         // constructor need for MessagePack
     }
 
+    public ChangeRequestMessage(MessageType type){
+        messageID = type.getId();
+    }
+
+    public enum MessageType{
+        ChangeRequest(1),
+        StartNegotiate(2),
+        CurrentVNCInfo(3);
+
+        private final int id;
+        private MessageType(final int id) {
+            this.id = id;
+        }
+
+        public int getId() {
+            return id;
+        }
+    }
 }
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java	Fri Nov 07 17:48:48 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java	Sat Nov 08 10:57:01 2014 +0900
@@ -1,5 +1,9 @@
 package jp.ac.u_ryukyu.alicevnc;
 
+import java.util.ArrayList;
+
+import jp.ac.u_ryukyu.alicevnc.ChangeRequestMessage.MessageType;
+
 import com.glavsoft.viewer.Viewer;
 
 import alice.codesegment.CodeSegment;
@@ -24,9 +28,17 @@
         if ("node0".equals(hostname)) {
             // root node connect to vnc Server first time.
             String[] args = {"localhost"};
-
             // negotiate VNCServer by Viewer
             Viewer.main(args);
+
+            // currentServer Info
+            ChangeRequestMessage currentServerInfo = new ChangeRequestMessage(MessageType.CurrentVNCInfo);
+            currentServerInfo.name = "node0";
+            currentServerInfo.changeServer = conf.getAllowChange();
+            ArrayList<String> list = new ArrayList<String>();
+            list.add("local");
+            currentServerInfo.route = list;
+            ods.put("changeRequest", currentServerInfo);
             new ReceiveServerInitMessage();
         } else {
             new ReceiveServerInitMessage("parent");
@@ -35,6 +47,7 @@
 
             }
         }
+
         new ReceiveChangeRequest();
         new SendChangeRequest();
     }
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java	Fri Nov 07 17:48:48 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java	Sat Nov 08 10:57:01 2014 +0900
@@ -2,6 +2,9 @@
 
 import java.util.List;
 
+import com.glavsoft.viewer.Viewer;
+
+import jp.ac.u_ryukyu.alicevnc.ChangeRequestMessage.MessageType;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
@@ -17,18 +20,42 @@
 
     @Override
     public void run() {
-        ChangeRequestMessage mes = info.asClass(ChangeRequestMessage.class);
+        ChangeRequestMessage order = info.asClass(ChangeRequestMessage.class);
 
         @SuppressWarnings("unchecked")
         List<String> clist = info1.asClass(List.class);
+        if (order.messageID == MessageType.ChangeRequest.getId()||
+                order.messageID == MessageType.CurrentVNCInfo.getId()) {
+            if (clist.contains("parent")){
+                order.route.add(info.from);
+                ods.put("parent", "changeRequest", order);
+                new ReceiveChangeRequest();
+            } else { // this node is root.
+                if (order.messageID == MessageType.CurrentVNCInfo.getId()) {
+                    ods.put("currentServer", order);
+                    new ReceiveChangeRequest();
+                } else {
+                    System.out.println("coming Server change request from "+ order.name);
+                    //new CheckCurrentInfo(info); // check change Server flag.
+                    order.messageID = MessageType.StartNegotiate.getId();
+                    ods.put(info.key, order);
+                    new ReceiveChangeRequest();
 
-        if (clist.contains("parent")){
-            mes.route.add(info.from);
-            ods.put("parent", "changeRequest", mes);
+                }
+            }
+        } else if (order.messageID == MessageType.StartNegotiate.getId()) {
+            if (order.route.size() == 0) {
+                // this node send ChangeVNCRequest
+                System.out.println("coming Server change request from "+ order.name);
+//                String[] args = {"localhost"};
+//                // negotiate VNCServer by Viewer
+//                Viewer.main(args);
+            } else {
+                String address = order.route.get(order.route.size() - 1);
+                order.route.remove(order.route.size() - 1);
+                ods.put(address, "changeRequest", order);
+            }
             new ReceiveChangeRequest();
-        } else { // this node is root.
-            System.out.println("coming Server change request from "+ mes.requestNodeName);
         }
-
     }
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java	Fri Nov 07 17:48:48 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java	Sat Nov 08 10:57:01 2014 +0900
@@ -2,13 +2,14 @@
 
 import java.util.List;
 
+import jp.ac.u_ryukyu.alicevnc.ChangeRequestMessage.MessageType;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
 public class SendChangeRequest extends CodeSegment {
 
-    private Receiver info = ids.create(CommandType.PEEK); // hostName
+    private Receiver info = ids.create(CommandType.PEEK);  // hostName
     private Receiver info1 = ids.create(CommandType.PEEK); // connection list
     private Receiver info2 = ids.create(CommandType.PEEK); // AliceVNCConfig
     private Receiver info3 = ids.create(CommandType.TAKE); // request
@@ -28,9 +29,9 @@
         @SuppressWarnings("unchecked")
         List<String> clist = info1.asClass(List.class);
 
-        ChangeRequestMessage mes = new ChangeRequestMessage();
+        ChangeRequestMessage mes = new ChangeRequestMessage(MessageType.ChangeRequest);
         mes.changeServer = config.getAllowChange();
-        mes.requestNodeName = hostname;
+        mes.name = hostname;
 
         String address = "local";
         if (clist.contains("parent")){ // this node is not root. compare node0 is better?