view src/main/java/christie/topology/manager/CreateTreeTopology.java @ 198:dd3c0ba6a0a6

fix topology manager
author akahori
date Sat, 09 Mar 2019 21:53:37 +0900
parents 6eb548c188e5
children
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 christie.topology.Message;
import christie.topology.TopologyDataGear;

import java.util.HashMap;

public class CreateTreeTopology extends CodeGear{

    @Take
    HostMessage newHost;

    @Take
    int hostCount;

    @Take
    HashMap<String, HostMessage> nameTable;

    @Take
    String MD5;

    @Take
    HashMap<String, String> absCookieTable;

    @Take
    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);

        TopologyDataGear topoDG = new TopologyDataGear();
        topoDG.setNodeName(nodeName);

        getDGM(nodeName).put("topoDG", topoDG);
        getDGM(nodeName).put("cookie", MD5);

        absCookieTable.put(MD5, nodeName);
        getLocalDGM().put("absCookieTable", absCookieTable);

        getLocalDGM().put("hostCount", hostCount + 1);
        newHost.setAlive(true);
        nameTable.put(nodeName, newHost);
        parentManager.register(nodeName);

        if (hostCount == 0) {
            // どこにも繋がれるところがないので, ルートのとき.
        } else {
            // put parent information own
            String parentNodeName = parentManager.getMyParent();
            HostMessage parentHost = nameTable.get(parentNodeName).clone();


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

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

        getLocalDGM().put("nameTable", nameTable);
        getLocalDGM().put("parentManager", parentManager);

        getDGM(nodeName).put("connectNodeNum", 1);
        //getDGM(nodeName).put("remoteNodeInfo", new HostMessage());
        getDGM(nodeName).put("_CONNECTIONMESSAGE", new Message());
        getDGM(nodeName).put("_STARTMESSAGE", new Message());
        getLocalDGM().put("startTime", System.currentTimeMillis());

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