view src/main/java/christie/codegear/CodeGearManager.java @ 272:b592fe1d4a4e default tip

create example Attendance
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Thu, 01 Jul 2021 20:41:07 +0900
parents e486c13d9ea9
children
line wrap: on
line source

package christie.codegear;

import christie.daemon.ChristieDaemon;
import christie.daemon.IncomingTcpConnection;
import christie.datagear.DataGearManager;
import christie.datagear.LocalDataGearManager;
import christie.datagear.RemoteDataGearManager;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * Created by e125769 on 12/7/17.
 * CodeGearの実行
 */
public class CodeGearManager{
    private ConcurrentHashMap<String, DataGearManager>  dgmList = new ConcurrentHashMap<String, DataGearManager>();
    private ConcurrentHashMap<Integer, CodeGearManager> cgmList;
    private ThreadPoolExecutor threadPoolExecutor;
    private LocalDataGearManager localDGM = new LocalDataGearManager();
    private ConcurrentHashMap<String, IncomingTcpConnection> acceptHash = new ConcurrentHashMap<String, IncomingTcpConnection>();
    public int cgmID;
    public ChristieDaemon daemon;
    public int localPort;

    public CodeGearManager(int cgmID, ThreadPoolExecutor exe, ConcurrentHashMap<Integer, CodeGearManager> cgmList, int localPort) {
        this.dgmList.put("local", localDGM);
        this.cgmList = cgmList;
        this.threadPoolExecutor = exe;
        this.cgmID = cgmID;
        this.localPort = localPort;
        this.daemon = new ChristieDaemon(localPort, this);
        this.daemon.listen();
    }

    public LocalDataGearManager getLocalDGM(){
        return localDGM;
    }

    public DataGearManager getDGM(String dgmName){
        if (dgmList.containsKey(dgmName)){
            return dgmList.get(dgmName);
        } else {
            throw new IllegalArgumentException("DGM "+ dgmName + " is not found.");
        }
    }

    public RemoteDataGearManager createRemoteDGM(String dgmName, String address, int port){
        RemoteDataGearManager remote = new RemoteDataGearManager(dgmName, address, port, this);
        dgmList.put(dgmName, remote);

        return remote;
    }

    public void submit(CodeGear cg){
        threadPoolExecutor.execute(cg.getCge());
    }

    public void setup(CodeGear cg){
        setup(cg, Thread.NORM_PRIORITY);
    }

    public void setup(CodeGear cg, int priority){
        cg.setup(this, priority);
    }

    public ConcurrentHashMap<Integer, CodeGearManager> getCgmList() {
        return cgmList;
    }

    public ConcurrentHashMap<String,  DataGearManager> getDGMList() { return dgmList; }

    public Boolean containsDGM(String dgmName){ return dgmList.containsKey(dgmName);}

    public void setAccept(String key, IncomingTcpConnection in) {
        acceptHash.put(key, in);
    }

    // broadcast data
    public void putAllDGM(String key, Object data){
        for(DataGearManager dgm:dgmList.values()){
            dgm.put(key, data);
        }
    }

}