view src/main/java/alice/datasegment/DataSegment.java @ 508:b7d02ea79850 dispose

change multicast Data Segment API
author sugi
date Sun, 04 Jan 2015 13:51:01 +0900
parents 63b18091374c
children 145c425db88d
line wrap: on
line source

package alice.datasegment;

import java.util.concurrent.ConcurrentHashMap;

import alice.daemon.IncomingTcpConnection;
import alice.datasegment.MulticastDataSegmentManager.SocketType;

public class DataSegment {

    private static DataSegment dataSegment = new DataSegment();
    private LocalDataSegmentManager local = new LocalDataSegmentManager();
    private ConcurrentHashMap<String, DataSegmentManager> dataSegmentManagers = new ConcurrentHashMap<String, DataSegmentManager>(); //TODO Over Head
    private ConcurrentHashMap<String, IncomingTcpConnection> acceptHash = new ConcurrentHashMap<String, IncomingTcpConnection>();

    private DataSegment() {
        dataSegmentManagers.put("local", local);
    }

    public static DataSegmentManager get(String key) {
        return dataSegment.dataSegmentManagers.get(key);
    }

    public static LocalDataSegmentManager getLocal() {
        return dataSegment.local;
    }

    public static void register(String key, DataSegmentManager manager) {
        dataSegment.dataSegmentManagers.put(key, manager);
    }

    public static RemoteDataSegmentManager connect(String connectionKey, String reverseKey, String hostName, int port) {
        RemoteDataSegmentManager manager = new RemoteDataSegmentManager(connectionKey, reverseKey, hostName, port);
        register(connectionKey, manager);
        return manager;
    }

    public static MulticastDataSegmentManager connectMulticast(String connectionKey ,String MCSTADDR, int port, String nis, SocketType type){
        MulticastDataSegmentManager manager = new MulticastDataSegmentManager(connectionKey ,MCSTADDR,  port, nis, type);
        if (type!=SocketType.Receiver)
            register(connectionKey, manager);
        return manager;
    }

    public static void setAccept(String key, IncomingTcpConnection incoming) {
        dataSegment.acceptHash.put(key, incoming);
    }

    public static IncomingTcpConnection getAccept(String key) {
        return dataSegment.acceptHash.get(key);
    }

    public static void remove(String key){
        dataSegment.dataSegmentManagers.remove(key);
    }

    public static boolean contains(String key){
        return dataSegment.dataSegmentManagers.containsKey(key);
    }
}