view datagear/LocalDataGearManager.cs @ 35:9e31b8c7a5bd

fix localDGM.finish()
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 04 May 2021 22:17:11 +0900
parents 96fc5e71274e
children ce46626dddb1
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);
        Put(key, dg);
    }

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

    // 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:
                //Console.WriteLine("data:" + cm.key + "  dg:"  + cm.dg.GetData().ToString());
                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<object> dg) { }

    public override void Finish() {
        Environment.Exit(0);
    }

    public override void Close() { }

    public override void Shutdown() { }
}
}