示例#1
0
 /// <summary>
 /// Очищает очередь для пакета
 /// </summary>
 /// <returns></returns>
 private bool GetPlace(int length, Queuering Packages)
 {
     while (Packages.TailDrop(length))
     {
         //очистить нужное место
         Packages.GetPackage();
     }
     return(true);
 }
示例#2
0
        public static void PrintToFileQueuering(Queuering queue)
        {
            String text = queue.ID + ":";

            PrintToFile(pathForQueuerings, text);

            if (queue.NOTNULL())
            {
                PrintToFile(pathForQueuerings, queue.PrintToFile());
            }
        }
示例#3
0
        /// <summary>
        /// Управление перегрузками
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Congestion_Management(object sender, EventArgs e)
        {
            Queue <Package> packages;

            if (ItExample)
            {
                packages = algorithm.GetPackages(Setting.CurSpeed);

                //if (packages == null && !timerGenPack.IsEnabled) timerAlg.Stop();

                if (packages != null)
                {
                    PrintToFile(packages);

                    SetResultQueue(packages);
                }

                if (curNumStartPackageTest >= packageStartTests.Count - 1 && !timerGenPack.IsEnabled && packages == null)
                {
                    ++numAlgorithm;
                    if (numAlgorithm < 7)
                    {
                        timerGenPack.Start();
                        SetAlg(numAlgorithm);
                        curNumStartPackageTest = 0;
                        StartPackage.Clear();
                    }

                    //запоминаем окончательные очереди
                    packageResultTests.Add(resultPackage);
                    resultPackage = new Queuering(Setting.MaxConstSizeQueuering);

                    curNumResultPackageTest++;
                }
            }
            else
            {
                packages = algorithm.GetPackages(Setting.CurSpeed);

                if (packages == null && !timerGenPack.IsEnabled)
                {
                    timerAlg.Stop();
                }

                if (packages != null)
                {
                    PrintToFile(packages);

                    SetResultQueue(packages);
                }
            }
        }
示例#4
0
        /// <summary>
        /// Имитация роутера
        /// </summary>
        /// <param name="numAlgorithm">Номер алгоритма</param>
        /// <param name="paint">Место отрисовки</param>
        /// <param name="info">Место отрисовки информации</param>
        /// <param name="numTest">Номер теста, если -1 - не тест</param>
        public Router(int numAlgorithm, Canvas paint, Canvas info, int numTest = -1)
        {
            genPackage  = new GenPackage();
            settingFile = new SettingFile();
            Graphica    = new MyGraphica(paint, info);

            Package.nextID          = 0;
            curNumStartPackageTest  = 0;
            curNumResultPackageTest = 0;

            if (numTest == -1)
            {
                ItExample = false;
            }
            else
            {
                ItExample = true;
            }

            this.numAlgorithm = numAlgorithm;

            resultPackage = new Queuering(Setting.MaxConstSizeQueuering);
            StartPackage  = new Queuering(Setting.MaxConstSizeQueuering);

            if (ItExample)
            {
                packageStartTests  = SettingFile.GetExample(numTest);
                packageResultTests = new List <Queuering>();

                /*for (int i = 0; i < 7; i++)
                 * {
                 *  packageResultTests.Add(new Queuering(Setting.MaxConstSizeQueuering));
                 * }*/
            }

            SetAlg(numAlgorithm);
        }
示例#5
0
 /// <summary>
 /// First In, First Out.
 /// Пакеты уходят из очереди ровно в том порядке, в котором они туда попали
 /// </summary>
 public FIFO()
 {
     queue = new Queuering();
 }