view src/main/java/christie/datagear/LocalDataGearManager.java @ 126:c6e4d0e4954c

update datagear add shutdown
author akahori
date Tue, 18 Dec 2018 15:12:45 +0900
parents d2f1c7e3cf01
children 2ecb3a93b8ae
line wrap: on
line source

package christie.datagear;

import christie.datagear.command.*;
import christie.datagear.dg.DataGear;

/**
 * Created by e125769 on 12/7/17.
 */
public class LocalDataGearManager extends DataGearManager {

    public void put(String key, Object data) {//main use
        DataGear dg = new DataGear(data);
        put(key, dg);
    }

    public void put(String key, DataGear dg){
        runCommand(new PutCommand(1, "local", key, dg));
    }

    public void runCommand(Command cm){
        switch (cm.type) {
            case PUT:
                dataGears.put(cm.key, cm.dg);

                if (waitList.containsKey(cm.key)){//ここもsyncronized?
                    runCommand(waitList.getAndRemoveCommand(cm.key));
                }

                break;
            case TAKE:
                if (dataGears.containsKey(cm.key)) {
                    takeAndSetData(cm);
                    cm.setInputs();
                } else {
                    waitList.add(cm);
                }

                break;
            case REMOTETAKE:
                if (dataGears.containsKey(cm.key)) {
                    takeAndSetData(cm);
                    runCommand(new ReplyCommand(cm));
                } else {
                    waitList.add(cm);
                }

                break;
            case PEEK:
                if (dataGears.containsKey(cm.key)) {
                    peekAndSetData(cm);
                    cm.setInputs();
                } else {
                    waitList.add(cm);
                }

                break;
            case REMOTEPEEK:
                if (dataGears.containsKey(cm.key)) {
                    peekAndSetData(cm);
                    runCommand(new ReplyCommand(cm));
                } else {
                    waitList.add(cm);
                }

                break;
            case REPLY:
                cm.connection.write(cm);
                break;

        }
    }

    @Override
    public void resolveWaitCommand(String key, DataGear dg) {

    }

    private void takeAndSetData(Command cm){
        cm.setDg(dataGears.take(cm.key));
    }

    private void peekAndSetData(Command cm){
        cm.setDg(dataGears.peek(cm.key));
    }

    @Override
    public void finish() {
        System.exit(0);
    }

    @Override
    public void close() {

    }

    @Override
    public void shutdown() {

    }
}