# HG changeset patch # User sugi # Date 1415411821 -32400 # Node ID 36a9a7de314d80d0030dff8c369866f7a016655f # Parent edf1b800d8b9d0c06e0fc252b2a7607bfa7b1ce4 root can receive message diff -r edf1b800d8b9 -r 36a9a7de314d src/main/java/jp/ac/u_ryukyu/alicevnc/ChangeRequestMessage.java --- 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 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; + } + } } diff -r edf1b800d8b9 -r 36a9a7de314d src/main/java/jp/ac/u_ryukyu/alicevnc/NegotiateVNCServer.java --- 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 list = new ArrayList(); + list.add("local"); + currentServerInfo.route = list; + ods.put("changeRequest", currentServerInfo); new ReceiveServerInitMessage(); } else { new ReceiveServerInitMessage("parent"); @@ -35,6 +47,7 @@ } } + new ReceiveChangeRequest(); new SendChangeRequest(); } diff -r edf1b800d8b9 -r 36a9a7de314d src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java --- 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 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 diff -r edf1b800d8b9 -r 36a9a7de314d src/main/java/jp/ac/u_ryukyu/alicevnc/SendChangeRequest.java --- 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 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?