view src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveChangeRequest.java @ 31:556e27a53219

refactor and bug fix
author sugi
date Sat, 08 Nov 2014 23:11:45 +0900
parents d8c6a4c7f16e
children 7d65ad341cc9
line wrap: on
line source

package jp.ac.u_ryukyu.alicevnc;

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

                    // negotiate VNCServer by Viewer
                    ods.put("vncRight", true);
                    new NegotiateVNCServer();
                    new ReceiveChangeRequest();
                } else {
                    new StopProxy();
                }
            } else {
                int last = order.route.size() - 1;
                String address = order.route.get(last);
                order.route.remove(last);
                ods.put(address, "changeRequest", order);
                new ReceiveChangeRequest();
            }
        }
    }
}