Exemple #1
0
        static void Main(string[] args)
        {
            rnd                       = new Random();
            expirationQueue           = new List <Tuple <int, UserRequest> >();
            expirationTimer           = new System.Timers.Timer();
            expirationTimer.AutoReset = true;
            expirationTimer.Elapsed  += RequestExpired;
            stopwatch                 = new Stopwatch();

            string Command;

            while (!SetUp.On())
            {
                ;
            }

            Console.WriteLine("Ресурсы в модели:");
            for (int i = 0; i < Model.vRes_s.Count; i++)
            {
                Console.WriteLine(Model.vRes_s[i].ToString());
            }

            Command  = "Command";
            isPaused = false;

            do
            {
                Model.WriteToFile();

                if (isPaused)
                {
                    continue;
                }

                Console.WriteLine("Введите команду:");
                Command = Console.ReadLine();
                Command = Command.ToUpper();
                try
                {
                    if (Command == "REQUEST")
                    {
                        pauseAll();
                        Console.WriteLine(Model.Request());
                        resumeAll();
                    }

                    if (Command == "OCCUPY")
                    {
                        pauseAll();
                        Console.WriteLine("Введите номер ресурса:");
                        Model.Occupy(Console.ReadLine());

                        resortExpirationQueue(true);
                        stopwatch.Start();
                    }

                    if (Command == "FREE")
                    {
                        pauseAll();
                        Console.WriteLine("Введите номер ресурса:");
                        Model.Free(Console.ReadLine());

                        resortExpirationQueue(false);
                        stopwatch.Start();
                    }
                }
                catch (OverflowException) { Console.WriteLine("Такого ресурса нет."); }
                catch (FormatException) { Console.WriteLine("Такого ресурса нет."); }
                catch (ResIdInvalid) { Console.WriteLine("Такого ресурса нет."); }
                catch (ResWasFree) { Console.WriteLine("Ресурс был свободен."); }
                catch (ResAreBusy) { Console.WriteLine("Все ресурсы заняты."); }
                catch (ResIsBusy) { Console.WriteLine("Ресурс уже занят."); }

                resumeAll();
            }while (Command != "");
        }
Exemple #2
0
        static void Main(string[] args)
        {
            string Command = "Continue";

            while (!SetUp.On())
            {
                ;
            }
            do
            {
                if (flg)
                {
                    continue;
                }

                using (StreamWriter writetext = new StreamWriter(SetUp.Path))
                {
                    string Reqstr = " ";
                    Reqstr += Model.RecList.Count;
                    writetext.WriteLine(Reqstr);
                    Reqstr = " ";
                    for (int k = 0; k < Model.RecList.Count; k++)
                    {
                        Reqstr += Model.RecList[k].Count + " ";
                        for (int z = 0; z < Model.RecList[k].Count; z++)
                        {
                            Reqstr += Model.RecList[k][z].ToString() + " ";
                        }
                        writetext.WriteLine(Reqstr);
                        Reqstr = " ";
                    }



                    string Questr = " ";
                    Questr += Model.QueList.Count;
                    for (int i = 0; i < Model.QueList.Count; i++)
                    {
                        Questr += " " + Model.QueList[i].Item1.ToString() + " " + Model.QueList[i].Item2.ToString();
                    }
                    writetext.WriteLine(Questr);


                    writetext.WriteLine(Model.vRes_s.Length);
                    for (int j = 0; j < Model.vRes_s.Length; j++)
                    {
                        writetext.WriteLine(Model.vRes_s[j].ToString());
                    }
                    writetext.WriteLine(Model.CntOfFreeRes);
                    writetext.WriteLine(Model.CrtIndexInList);
                }



                Console.WriteLine("Введите команду:");
                Command = Console.ReadLine();
                Command = Command.ToUpper();
                try
                {
                    if (Command == "REQUEST")
                    {
                        Console.WriteLine(Model.Request());
                    }
                    if (Command == "OCCUPY")
                    {
                        Console.WriteLine("Введите количество ресурсов:");
                        Model.Occupy(Console.ReadLine());
                        Console.WriteLine("Ресурсы стали занятыми.");
                    }
                    ;
                    if (Command == "FREE")
                    {
                        Console.WriteLine("Введите номер запроса:");
                        Model.Free(Console.ReadLine());
                        if (Model.QueList.Count > 0)
                        {
                            if (Model.CntOfFreeRes >= Model.QueList[0].Item2)
                            {
                                Console.WriteLine("Заявка вышла из очереди. Ресурсы заняты.");
                                Model.Occupy(Convert.ToString(Model.QueList[0].Item2));
                                if (Model.QueList.Count == 1)
                                {
                                    Model.QueList.RemoveAt(0);
                                    timer.Change(Timeout.Infinite, Timeout.Infinite);
                                }
                                else
                                {
                                    timer.Change(Model.QueList[1].Item1 * 1000, Model.QueList[1].Item1 * 1000);
                                    Model.QueList.RemoveAt(0);
                                }
                            }
                        }
                    }
                    ;
                }
                catch (OverflowException) { Console.WriteLine("Такого ресурса нет."); }
                catch (FormatException) { Console.WriteLine("Такого ресурса нет."); }
                catch (ResIdInvalid) { Console.WriteLine("Вы пытаетесь занять больше ресуросов чем есть в системе или вы ввели отрицательное число."); }
                catch (RecIdInvalid) { Console.WriteLine("Такого запроса не существут или вы ввели отрицательное число"); }
                catch (ResWasFree) { Console.WriteLine("Ресурс был свободен."); }
                catch (ResAreBusy excp)
                {
                    Console.WriteLine("Все ресурсы заняты. Хотите встать в очередь? Y/N?");
                    string chs;
                    chs = Console.ReadLine();
                    int temp = (short)excp.Data["ResCnt"];
                    Console.WriteLine(temp);
                    if (chs.ToUpper() == "Y")
                    {
                        Model.queue(temp);
                    }
                    else
                    {
                        Console.WriteLine("Запрос анулирован");
                    }
                }
                catch (ResIsBusy) { Console.WriteLine("ресурс уже занят."); }


                if (Model.QueList.Count == 0)
                {
                    timer.Change(Timeout.Infinite, Timeout.Infinite);
                }
                else
                {
                    timer.Change(Model.QueList[0].Item1 * 1000, Model.QueList[0].Item1 * 1000);
                    StartTime = DateTime.Now;
                }



                for (int i = 0; i < Model.vRes_s.Length; i++)
                {
                    Console.Write(Model.vRes_s[i] + "   ");
                }
                Console.WriteLine();
            }while (Command != "");
        }