changeset 27:14c7bd581cc2

implement change VNC Server protocol
author sugi
date Sat, 08 Nov 2014 15:50:32 +0900
parents 18dd339b98ea
children 71dd46e2d706
files build.gradle src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java src/main/java/jp/ac/u_ryukyu/alicevnc/CheckCurrentInfo.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 src/main/java/jp/ac/u_ryukyu/alicevnc/StopProxy.java
diffstat 7 files changed, 90 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/build.gradle	Sat Nov 08 11:11:27 2014 +0900
+++ b/build.gradle	Sat Nov 08 15:50:32 2014 +0900
@@ -6,9 +6,9 @@
 targetCompatibility = 1.8
 version = '1.0'
 
-repositories {    
-    maven(){ 
-        url 'http://www.cr.ie.u-ryukyu.ac.jp/hg/maven/raw-file/91e712796851/'
+repositories {
+    maven(){
+        url 'http://www.cr.ie.u-ryukyu.ac.jp/hg/maven/raw-file/129974fc40ce/'
     }
 }
 
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java	Sat Nov 08 11:11:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java	Sat Nov 08 15:50:32 2014 +0900
@@ -6,10 +6,10 @@
 
 @Message
 public class ChangeRequestMessage {
-
+    //TODO class name change
     public int messageID;
     public List<String> route;
-    public boolean changeServer = false;
+    public boolean allowChange = false;
     public String name;
 
     public ChangeRequestMessage(){
@@ -23,7 +23,8 @@
     public enum MessageType{
         ChangeRequest(1),
         StartNegotiate(2),
-        CurrentVNCInfo(3);
+        CurrentVNCInfo(3),
+        StopProxy(4);
 
         private final int id;
         private MessageType(final int id) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/CheckCurrentInfo.java	Sat Nov 08 15:50:32 2014 +0900
@@ -0,0 +1,43 @@
+package jp.ac.u_ryukyu.alicevnc;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class CheckCurrentInfo extends CodeSegment {
+
+    private Receiver info = ids.create(CommandType.TAKE); // current Server Info
+    private ChangeRequestMessage order;
+
+    public CheckCurrentInfo(ChangeRequestMessage order){
+        info.setKey("currentServer");
+        this.order = order;
+    }
+
+    @Override
+    public void run() {
+        ChangeRequestMessage current = info.asClass(ChangeRequestMessage.class);
+
+        if (current.allowChange) {
+            // send Stop message to current
+            int last = current.route.size() - 1;
+            String address = current.route.get(last);
+            current.route.remove(last);
+            ods.put(address, "changeRequest", current);
+
+            // update current server info
+            ods.update("currentServer", order);
+        } else {
+            // not allow to change
+            int last = order.route.size() - 1;
+            String address = order.route.get(last);
+            order.route.remove(last);
+            ods.put(address, "changeRequest", order);
+
+            // update current server info
+            ods.update("currentServer", current);
+        }
+        new ReceiveChangeRequest();
+    }
+
+}
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java	Sat Nov 08 11:11:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java	Sat Nov 08 15:50:32 2014 +0900
@@ -34,9 +34,8 @@
             // currentServer Info
             ChangeRequestMessage currentServerInfo = new ChangeRequestMessage(MessageType.CurrentVNCInfo);
             currentServerInfo.name = "node0";
-            currentServerInfo.changeServer = conf.getAllowChange();
+            currentServerInfo.allowChange = conf.getAllowChange();
             ArrayList<String> list = new ArrayList<String>();
-//            list.add("local");
             currentServerInfo.route = list;
             ods.put("changeRequest", currentServerInfo);
             new ReceiveServerInitMessage();
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java	Sat Nov 08 11:11:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java	Sat Nov 08 15:50:32 2014 +0900
@@ -37,21 +37,26 @@
                     new ReceiveChangeRequest();
                 } else {
                     System.out.println("coming Server change request from "+ order.name+" "+order.route.size());
-                    //new CheckCurrentInfo(info); // check change Server flag.
+                    new CheckCurrentInfo(order); // check change Server flag.
+
+
                     order.messageID = MessageType.StartNegotiate.getId();
                     order.name = "node0";
                     ods.put(info.key, order);
-                    new ReceiveChangeRequest();
-
                 }
             }
-        } else if (order.messageID == MessageType.StartNegotiate.getId()) {
+        } else if (order.messageID == MessageType.StartNegotiate.getId()||
+                order.messageID == MessageType.StopProxy.getId()) {
             if (order.route.size() == 0) {
-                // this node send ChangeVNCRequest
-                System.out.println("coming StartNegotiate from "+ order.name);
-//                String[] args = {"localhost"};
-//                // negotiate VNCServer by Viewer
-//                Viewer.main(args);
+                if (order.messageID == MessageType.StartNegotiate.getId()){
+                    // this node send ChangeVNCRequest
+                    System.out.println("coming StartNegotiate from "+ order.name);
+                    String[] args = {"localhost"};
+                    // negotiate VNCServer by Viewer
+                    Viewer.main(args);
+                } else {
+                    new StopProxy();
+                }
             } else {
                 String address = order.route.get(order.route.size() - 1);
                 order.route.remove(order.route.size() - 1);
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java	Sat Nov 08 11:11:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java	Sat Nov 08 15:50:32 2014 +0900
@@ -31,7 +31,7 @@
         List<String> clist = info1.asClass(List.class);
 
         ChangeRequestMessage mes = new ChangeRequestMessage(MessageType.ChangeRequest);
-        mes.changeServer = config.getAllowChange();
+        mes.allowChange = config.getAllowChange();
         mes.route = new ArrayList<String>();
         mes.name = hostname;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/StopProxy.java	Sat Nov 08 15:50:32 2014 +0900
@@ -0,0 +1,24 @@
+package jp.ac.u_ryukyu.alicevnc;
+
+import com.glavsoft.rfb.protocol.Protocol;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class StopProxy extends CodeSegment {
+
+    private Receiver info = ids.create(CommandType.TAKE);
+
+    public StopProxy() {
+        info.setKey("Protocol");
+    }
+    @Override
+    public void run() {
+        System.out.println("call clean up session");
+        Protocol p = info.asClass(Protocol.class);
+        p.cleanUpSession();
+
+    }
+
+}