view src/main/java/christie/topology/manager/CreateTreeTopology.java @ 98:c0ce4d151f93

update uncomment System.exit
author akahori
date Tue, 18 Sep 2018 09:22:48 +0900
parents 5cd99bac9abd
children 5c807f996749
line wrap: on
line source

package christie.topology.manager;


import christie.annotation.Peek;
import christie.annotation.Take;
import christie.codegear.CodeGear;
import christie.codegear.CodeGearManager;
import christie.topology.HostMessage;

import java.util.HashMap;

public class CreateTreeTopology extends CodeGear{

    @Take
    HostMessage newHost;

    @Take
    int hostCount;

    @Peek
    HashMap<String, HostMessage> nameTable;

    @Take
    String MD5;

    @Peek
    HashMap<String, String> absCookieTable;

    @Peek
    ParentManager parentManager;

    public CreateTreeTopology(){
    }

    @Override
    protected void run(CodeGearManager cgm) {


        String nodeName = "node" + hostCount;
        String newHostName = newHost.getHostName();
        int newHostPort = newHost.getPort();


        cgm.createRemoteDGM(nodeName, newHostName, newHostPort);
        getDGM(nodeName).put("nodeName", nodeName);
        getDGM(nodeName).put("cookie", MD5);

        absCookieTable.put(MD5, nodeName);
        getLocalDGM().put("hostCount", hostCount + 1);

        newHost.setAlive(true);
        nameTable.put(nodeName, newHost);
        parentManager.register(nodeName);

        if (hostCount == 0) {
            // どこにも繋がれるところがないので, ルートのとき.
            // ルートなので, connectNodeNumもreverseCountも0でいい.
            getDGM(nodeName).put("connectNodeNum", 0);
            getDGM(nodeName).put("reverseCount", 0);

        } else {
            // 親のみにつながればいいので1
            getDGM(nodeName).put("connectNodeNum", 1);
            // put parent information own
            String parentNodeName = parentManager.getMyParent();
            HostMessage parentHost = nameTable.get(parentNodeName);

            // 相手からhostNameとportはもらっているので, nodeの情報だけ与えれば良い.
            parentHost.setNodeInfo(parentNodeName, "parent", nodeName);
            getLocalDGM().put("nodeInfo", parentHost);
            cgm.setup(new RecordTopology());

            // newChildHost, newHostも同じ
            newHost.setNodeInfo(nodeName, "child" + parentManager.getMyNumber(), parentNodeName);
            getLocalDGM().put("nodeInfo", newHost);
            cgm.setup(new RecordTopology());
        }

        getDGM(nodeName).put("start", "start");

        cgm.setup(new CreateTreeTopology());
    }
}