view src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java @ 24:36a9a7de314d

root can receive message
author sugi
date Sat, 08 Nov 2014 10:57:01 +0900
parents edf1b800d8b9
children 18dd339b98ea
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.
                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();

                }
            }
        } 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();
        }
    }
}