view datagear/LocalDataGearManager.cs @ 20:3aaa77e12493

update
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 01 Dec 2020 20:23:09 +0900
parents
children 0cd2684e401b
line wrap: on
line source

using System;
using Christie_net.datagear.command;
using Christie_net.datagear.dg;

namespace Christie_net.datagear {
public class LocalDataGearManager : DataGearManager {
    // 通常はこちらを使用する
    public override void Put(string key, object data) {
        DataGear<object> dg = new DataGear<object>(data);
        PutRun(key, dg);
    }

    public void PutRun(string key, DataGear<object> dg) {
        Command cm = new CommandBuilder().Init(CommandType.PUT).CgmID(1)
            .ToDgmName("local").Key(key).Dg(dg).Build();
        RunCommand(cm);
    }

    public override void RunCommand(Command cm) {
        switch (cm.type) {
            case CommandType.PUT:
                dataGears.SetData(cm);
                if (waitList.ContainsKey(cm.key)) {
                    RunCommand(waitList.GetAndRemoveCommand(cm.key));
                }

                break;
            case CommandType.TAKE:
            case CommandType.REMOTETAKE:
            case CommandType.PEEK:
            case CommandType.REMOTEPEEK:
                if (dataGears.ContainsKey(cm.key)) {
                    SetData(cm);
                    cm.Execute();
                } else {
                    waitList.Add(cm);
                }

                break;
            case CommandType.REPLY:
                cm.Execute();
                break;
        }
    }

    private void SetData(Command cm) {
        cm.SetDg(dataGears.GetData(cm));
    }

    public override void ResolveWaitCommand(string key, DataGear<Type> dg) { }

    public override void Finish() { }

    public override void Close() { }

    public override void Shutdown() { }
}
}