# HG changeset patch # User sugi # Date 1415429432 -32400 # Node ID 14c7bd581cc2935d1e66ce0ed30a89dcc1b31f0b # Parent 18dd339b98ea187c39dc67c27c34feedd4695965 implement change VNC Server protocol diff -r 18dd339b98ea -r 14c7bd581cc2 build.gradle --- 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/' } } diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java --- 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 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) { diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/CheckCurrentInfo.java --- /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(); + } + +} diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java --- 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 list = new ArrayList(); -// list.add("local"); currentServerInfo.route = list; ods.put("changeRequest", currentServerInfo); new ReceiveServerInitMessage(); diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java --- 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); diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java --- 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 clist = info1.asClass(List.class); ChangeRequestMessage mes = new ChangeRequestMessage(MessageType.ChangeRequest); - mes.changeServer = config.getAllowChange(); + mes.allowChange = config.getAllowChange(); mes.route = new ArrayList(); mes.name = hostname; diff -r 18dd339b98ea -r 14c7bd581cc2 src/main/java/jp/ac/u_ryukyu/alicevnc/StopProxy.java --- /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(); + + } + +}