view src/main/java/alice/topology/manager/CreateStarTopology.java @ 602:8a9fd716c335 dispose

change topology class extends CodeSegment from MetaCodeSegment, Chat minor fix
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 03 May 2016 20:09:45 +0900
parents 30f2c04571c2
children
line wrap: on
line source

package alice.topology.manager;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.DataSegment;
import alice.datasegment.Receiver;
import alice.topology.HostMessage;
import org.msgpack.type.ValueFactory;

import java.util.HashMap;

/**
 * Created by e125769 on 4/12/16.
 * this class put node info
 */
public class CreateStarTopology extends CodeSegment {

    private Receiver info = ids.create(CommandType.TAKE);
    private Receiver info1 = ids.create(CommandType.TAKE);
    private Receiver info2 = ids.create(CommandType.TAKE);
    private Receiver info3 = ids.create(CommandType.PEEK);

    public CreateStarTopology(){
        info.setKey("newHost");         //HostMessage
        info1.setKey("hostCount");      //incoming host count number for put node name like node0, node1, node2
        info2.setKey("nameTable");      //HashMap.<String:nodeName, HostMessage>
        info3.setKey("root");
    }

    @Override
    public void run() {
        HostMessage host = info.asClass(HostMessage.class);
        HostMessage root = info3.asClass(HostMessage.class);
        int comingHostCount = info1.asInteger();

        HashMap<String, HostMessage> nameTable = info2.asClass(HashMap.class);

        String nodeName = "node"+comingHostCount;
        // Manager connect to Node
        DataSegment.connect(nodeName, nodeName, host.name, host.port);
        ods.put(nodeName, "host"+host.topMNum, nodeName);

        ods.put(info1.key, comingHostCount+1);
        host.alive = true;
        nameTable.put(nodeName, host);


        // put parent information own
        HostMessage newHost = new HostMessage(root.name, root.port, "parent", "child"+comingHostCount);
        newHost.absName = root.name;
        newHost.remoteAbsName = nodeName; // address
        ods.put(newHost.remoteAbsName, newHost);

        // put own information parent
        newHost = new HostMessage(host.name, host.port, "child"+comingHostCount, "parent");
        newHost.absName = nodeName;
        newHost.remoteAbsName = root.name;
        ods.put(newHost.remoteAbsName, newHost);


        ods.put(info2.key, nameTable);

        new CreateStarTopology();

    }
}