27
|
1 package jp.ac.u_ryukyu.alicevnc;
|
|
2
|
29
|
3 import java.util.ArrayList;
|
|
4
|
28
|
5 import jp.ac.u_ryukyu.alicevnc.ChangeRequestMessage.MessageType;
|
27
|
6 import alice.codesegment.CodeSegment;
|
|
7 import alice.datasegment.CommandType;
|
|
8 import alice.datasegment.Receiver;
|
|
9
|
|
10 public class CheckCurrentInfo extends CodeSegment {
|
|
11
|
|
12 private Receiver info = ids.create(CommandType.TAKE); // current Server Info
|
|
13 private ChangeRequestMessage order;
|
|
14
|
|
15 public CheckCurrentInfo(ChangeRequestMessage order){
|
|
16 info.setKey("currentServer");
|
|
17 this.order = order;
|
|
18 }
|
|
19
|
|
20 @Override
|
|
21 public void run() {
|
28
|
22 System.out.println("check");
|
27
|
23 ChangeRequestMessage current = info.asClass(ChangeRequestMessage.class);
|
|
24
|
|
25 if (current.allowChange) {
|
|
26 // send Stop message to current
|
28
|
27 current.messageID = MessageType.StopProxy.getId();
|
27
|
28 int last = current.route.size() - 1;
|
|
29 String address = current.route.get(last);
|
|
30 current.route.remove(last);
|
|
31 ods.put(address, "changeRequest", current);
|
|
32
|
29
|
33 ChangeRequestMessage mes = new ChangeRequestMessage(MessageType.StartNegotiate);
|
|
34 mes.route = new ArrayList<String>();
|
|
35 for (String s : order.route) {
|
|
36 mes.route.add(s);
|
|
37 }
|
|
38 mes.name = "node0";
|
|
39
|
|
40 last = mes.route.size() - 1;
|
|
41 address = mes.route.get(last);
|
|
42 mes.route.remove(last);
|
|
43 ods.put(address, "changeRequest", mes);
|
27
|
44 } else {
|
|
45 // not allow to change
|
|
46 int last = order.route.size() - 1;
|
|
47 String address = order.route.get(last);
|
|
48 order.route.remove(last);
|
|
49 ods.put(address, "changeRequest", order);
|
|
50
|
|
51 // update current server info
|
|
52 ods.update("currentServer", current);
|
|
53 }
|
|
54 new ReceiveChangeRequest();
|
|
55 }
|
|
56
|
|
57 }
|