22
|
1 package jp.ac.u_ryukyu.alicevnc;
|
|
2
|
|
3 import java.util.List;
|
|
4
|
24
|
5 import com.glavsoft.viewer.Viewer;
|
|
6
|
|
7 import jp.ac.u_ryukyu.alicevnc.ChangeRequestMessage.MessageType;
|
22
|
8 import alice.codesegment.CodeSegment;
|
|
9 import alice.datasegment.CommandType;
|
|
10 import alice.datasegment.Receiver;
|
|
11
|
|
12 public class ReceiveChangeRequest extends CodeSegment {
|
|
13 private Receiver info = ids.create(CommandType.TAKE);
|
|
14 private Receiver info1 = ids.create(CommandType.PEEK); // connection list
|
|
15
|
|
16 public ReceiveChangeRequest() {
|
|
17 info.setKey("changeRequest");
|
|
18 info1.setKey("_CLIST");
|
|
19 }
|
|
20
|
|
21 @Override
|
|
22 public void run() {
|
24
|
23 ChangeRequestMessage order = info.asClass(ChangeRequestMessage.class);
|
22
|
24
|
|
25 @SuppressWarnings("unchecked")
|
|
26 List<String> clist = info1.asClass(List.class);
|
24
|
27 if (order.messageID == MessageType.ChangeRequest.getId()||
|
|
28 order.messageID == MessageType.CurrentVNCInfo.getId()) {
|
|
29 if (clist.contains("parent")){
|
|
30 order.route.add(info.from);
|
|
31 ods.put("parent", "changeRequest", order);
|
|
32 new ReceiveChangeRequest();
|
|
33 } else { // this node is root.
|
26
|
34 order.route.add(info.from);
|
24
|
35 if (order.messageID == MessageType.CurrentVNCInfo.getId()) {
|
|
36 ods.put("currentServer", order);
|
|
37 new ReceiveChangeRequest();
|
|
38 } else {
|
26
|
39 System.out.println("coming Server change request from "+ order.name+" "+order.route.size());
|
27
|
40 new CheckCurrentInfo(order); // check change Server flag.
|
24
|
41 }
|
|
42 }
|
27
|
43 } else if (order.messageID == MessageType.StartNegotiate.getId()||
|
|
44 order.messageID == MessageType.StopProxy.getId()) {
|
24
|
45 if (order.route.size() == 0) {
|
27
|
46 if (order.messageID == MessageType.StartNegotiate.getId()){
|
|
47 // this node send ChangeVNCRequest
|
|
48 System.out.println("coming StartNegotiate from "+ order.name);
|
30
|
49
|
27
|
50 // negotiate VNCServer by Viewer
|
30
|
51 ods.put("vncRight", true);
|
|
52 new NegotiateVNCServer();
|
|
53 new ReceiveChangeRequest();
|
27
|
54 } else {
|
|
55 new StopProxy();
|
|
56 }
|
24
|
57 } else {
|
28
|
58 int last = order.route.size() - 1;
|
|
59 String address = order.route.get(last);
|
|
60 order.route.remove(last);
|
24
|
61 ods.put(address, "changeRequest", order);
|
29
|
62 new ReceiveChangeRequest();
|
24
|
63 }
|
23
|
64 }
|
22
|
65 }
|
|
66 } |