Mercurial > hg > Applications > AliceVNC
view src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java @ 27:14c7bd581cc2
implement change VNC Server protocol
author | sugi |
---|---|
date | Sat, 08 Nov 2014 15:50:32 +0900 |
parents | 18dd339b98ea |
children | 71dd46e2d706 |
line wrap: on
line source
package jp.ac.u_ryukyu.alicevnc; 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; public class ReceiveChangeRequest extends CodeSegment { private Receiver info = ids.create(CommandType.TAKE); private Receiver info1 = ids.create(CommandType.PEEK); // connection list public ReceiveChangeRequest() { info.setKey("changeRequest"); info1.setKey("_CLIST"); } @Override public void run() { 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. order.route.add(info.from); if (order.messageID == MessageType.CurrentVNCInfo.getId()) { ods.put("currentServer", order); new ReceiveChangeRequest(); } else { System.out.println("coming Server change request from "+ order.name+" "+order.route.size()); new CheckCurrentInfo(order); // check change Server flag. order.messageID = MessageType.StartNegotiate.getId(); order.name = "node0"; ods.put(info.key, order); } } } else if (order.messageID == MessageType.StartNegotiate.getId()|| order.messageID == MessageType.StopProxy.getId()) { if (order.route.size() == 0) { 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); ods.put(address, "changeRequest", order); } new ReceiveChangeRequest(); } } }