view src/main/java/alice/topology/manager/IncomingHosts.java @ 410:74e13553e3e3 dispose

change call do setKey in constractor
author tatsuki
date Sat, 05 Jul 2014 18:27:55 +0900
parents 91e1b063a89f
children 2c6f86320691
line wrap: on
line source

package alice.topology.manager;

import java.util.HashMap;
import java.util.LinkedList;

import org.msgpack.type.ValueFactory;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.DataSegment;
import alice.datasegment.Receiver;
import alice.topology.HostMessage;

public class IncomingHosts extends CodeSegment {

    HashMap<String, LinkedList<NodeInfo>> topology;
    LinkedList<String> nodeNames;
    Receiver host = ids.create(CommandType.TAKE);

    public IncomingHosts(HashMap<String, LinkedList<NodeInfo>> topology,
            LinkedList<String> nodeNames) {
        this.topology = topology;
        this.nodeNames = nodeNames;
        this.host.setKey("local", "host");
    }

    @Override
    public void run() {
        HostMessage host = this.host.asClass(HostMessage.class);
        String nodeName = nodeNames.poll();
        // Manager connect to Node
        DataSegment.connect(nodeName, "", host.name, host.port);
        ods.put(nodeName, "host", nodeName);
        LinkedList<NodeInfo> nodes = topology.get(nodeName);
        for (NodeInfo nodeInfo : nodes) {
            HostMessage newHost = new HostMessage(host.name, host.port,
                    nodeInfo.connectionName, nodeInfo.reverseName);
            ods.put("local", nodeInfo.sourceNodeName, newHost);
        }

        if (nodeNames.isEmpty()) {
            // configuration finish
            for (String key : topology.keySet()) {
                ods.put("local", key, ValueFactory.createNilValue());
            }
        } else {
            new IncomingHosts(topology, nodeNames);
        }
    }

}