view datagear/WaitList.cs @ 46:41aae40a611c

bug fix
author riono <e165729@ie.u-ryukyu.ac.jp>
date Fri, 07 Jan 2022 19:38:49 +0900
parents efb06874a34e
children 6e5c0977d756
line wrap: on
line source

using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using Christie_net.datagear.command;

namespace Christie_net.datagear {
public class WaitList {
    private Dictionary<string, BlockingCollection<Command>> waitlist = new Dictionary<string, BlockingCollection<Command>>();
    private object syncObject = new object();

    public void Add(Command cm) {
        lock (syncObject) {
            if (waitlist.ContainsKey(cm.key)) {
                waitlist[cm.key].TryAdd(cm);
            } else {
                BlockingCollection<Command> queue = new BlockingCollection<Command>();
                queue.TryAdd(cm);
                waitlist.Add(cm.key, queue);
            }
        }
    }

    public Command GetAndRemoveCommand(string key) {
        lock (syncObject) {
            Command cm = null;
            if (waitlist.ContainsKey(key)) {
                waitlist[key].TryTake(out cm);
                if (waitlist[key].Count == 0) {
                    waitlist[key].Dispose();
                    waitlist.Remove(key);
                }
            }
            Console.WriteLine("cm:" + cm);
            return cm;
        }
    }

    public bool ContainsKey(string key) {
        lock (syncObject) {
            return waitlist.ContainsKey(key);   
        }
    }
}
}