view src/main/java/alice/topology/manager/SearchHostName.java @ 429:1b32ea1263f3 dispose

work but have bug
author sugi
date Tue, 22 Jul 2014 18:44:18 +0900
parents
children 59e84cd75403
line wrap: on
line source

package alice.topology.manager;

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

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

public class SearchHostName extends CodeSegment {

    private Receiver info = ids.create(CommandType.TAKE);  // reconnect NodeInfo
    private Receiver info1 = ids.create(CommandType.TAKE); // topology recode (HashMap)

    public SearchHostName(){
        info.setKey("reconnect");
        info1.setKey("topology");
    }

    @Override
    public void run() {
        HostMessage hostInfo = info.asClass(HostMessage.class);
        @SuppressWarnings("unchecked")
        HashMap<String, LinkedList<HostMessage>> topology = info1.asClass(HashMap.class);

        DataSegment.remove(hostInfo.absName);
        DataSegment.connect(hostInfo.absName, "", hostInfo.name, hostInfo.port);
        ods.put(hostInfo.absName, "host", hostInfo.absName);
        
        // put Host dataSegment on reconnect node 
        if (topology.containsKey(hostInfo.absName)) {
            LinkedList<HostMessage> clist = topology.get(hostInfo.absName);
            for (HostMessage node : clist)
                ods.put(hostInfo.absName, node);

        }

        // update topology information
        for (LinkedList<HostMessage> list :topology.values()){
            for (HostMessage host : list){

                // find and update old info 
                if (hostInfo.absName.equals(host.absName)){ 
                    if (!hostInfo.name.equals(host.name) || (hostInfo.port != host.port)){ 
                        list.remove(host);
                        HostMessage newHost = new HostMessage(hostInfo.name, hostInfo.port, host.connectionName, host.reverseName);
                        newHost.absName = host.absName;
                        newHost.remoteAbsName = host.remoteAbsName;

                        ods.put(host.remoteAbsName, newHost);
                        list.add(newHost);
                    } else {
                        // nothing to do ?
                    }
                }
            }
        }
        
        for (LinkedList<HostMessage> list :topology.values()){
            System.out.print(list.get(0).remoteAbsName+" : ");
            for (HostMessage host : list){
                System.out.print("[ "+host.absName+" "+host.name+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]");
            }
            System.out.println();
        }
        ods.put("topology", topology);
    }

}