view src/main/java/alice/topology/manager/CheckComingHost.java @ 599:3284428f525e dispose

add MetaCodeSegment & MetaDSM
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2016 01:16:35 +0900
parents 8f765e3eed24
children 8a9fd716c335
line wrap: on
line source

package alice.topology.manager;

import java.util.HashMap;
import alice.codesegment.CodeSegment;
import alice.codesegment.MetaCodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import alice.topology.HostMessage;

/**
 * This class check hash and put "newHost"(host info) for CreateTopology when putted "host"(join request) from topology node
 */
public class CheckComingHost extends MetaCodeSegment {
    // checkIncomingHost
    private Receiver host = ids.create(CommandType.TAKE);
    private Receiver absCookieTable = ids.create(CommandType.PEEK); // cookie, AbsName HashMap

    public CheckComingHost(){
        this.host.setKey("host");//接続要求してきたノードの情報
        this.absCookieTable.setKey("absCookieTable");
    }

    @Override
    public void run() {
        HostMessage host = this.host.asClass(HostMessage.class);
        @SuppressWarnings("unchecked")
        HashMap<String, String> absCookieTable = this.absCookieTable.asClass(HashMap.class);
        boolean match = false;
        // check cookie
        if (host.cookie != null) {
            if (absCookieTable.containsKey(host.cookie)){
                match = true;
                host.absName = absCookieTable.get(host.cookie);
                System.out.println("match");
            }
        }

        if (match){
            // coming host has ever joined this App
            ods.put("reconnectHost", host);
            new SearchHostName();
        } else {
            ods.put("orderHash", "order");
            ods.put("newHost", host);
        }

        new CheckComingHost();
    }

}