Ejemplo n.º 1
0
 /// <summary>
 /// Размещает запросы в очереди по серверам
 /// </summary>
 /// <param name="k">Количество мест в очереди сервера</param>
 void QueueAllocation(int k)
 {
     for (int j = 0; j < k; j++)
     {
         for (int i = 0; i < Clusters.Count; i++)
         {
             cluster cl = (cluster)Clusters[i];
             if ((cl.GetQueueCount() < 2) && local_queue.Count > 0)
             {
                 int[] arr = (int[])local_queue.Peek();
                 //если запрос из своего региона
                 if (arr[2] == Region_num)
                 {
                     cluster_client cl_w = (cluster_client)Clients[arr[1]];
                     if (CURENT_TOTAL_W > 0)
                     {
                         CURENT_TOTAL_W -= cl_w.GetWieghtQuery();
                     }
                 }
                 else
                 {
                     if (CURENT_TOTAL_W > 0)
                     {
                         CURENT_TOTAL_W -=
                             cluster_query.GetQueryWeightByNum(arr[0]);
                     }
                 }
                 cl.QueueAdd((int[])local_queue.Dequeue());
                 cl.SetQueryTime();
             }
         }
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Очищает очередь региона и серверов в регионе
 /// (нужна для старта в момент времени 0)
 /// </summary>
 public void ClearQueue()
 {
     local_queue.Clear();
     for (int i = 0; i < Clusters.Count; i++)
     {
         cluster cl = (cluster)Clusters[i];
         cl.QueueRemove();
         cl.QueueRemove();
     }
     for (int i = 0; i < Clients.Count; i++)
     {
         cluster_client cl = (cluster_client)Clients[i];
         cl.request_sended = false;
     }
     CURENT_TOTAL_W = 0;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Инициализая серверов и клиентов
 /// </summary>
 private void InitClientCluster()
 {
     for (int i = 0; i < Clients.Capacity; i++)
     {
         cluster_client cl = new cluster_client(i, Region_num);
         Clients.Add(cl);
     }
     QueueRecive();                              //Инициализация очереди РБН
     for (int i = 0; i < Clusters.Capacity; i++)
     {
         cluster cl = new cluster();
         Clusters.Add(cl);
     }
     QueueAllocation(2);                         //Инициализация очереди серверов
     QueueRecive();                              //Заполенение очереди РБН
 }
Ejemplo n.º 4
0
        /// <summary>
        /// проверяет кластеры на наличие выполненных запросов
        /// </summary>
        /// <returns>true - если есть сервера с выполенными запросами</returns>
        bool CheckClusters()
        {
            bool flag = false;

            for (int i = 0; i < Clusters.Count; i++)
            {
                cluster cl = (cluster)Clusters[i];
                if (cl.query_time < 0.01 && cl.GetQueueCount() > 0)
                {
                    int[] arr = cl.GetQueryInfo(true);
                    //если запрос из своего региона
                    if (arr[2] == Region_num)
                    {
                        TOTAL_QUERY_COUNT++;
                        cluster_client client = (cluster_client)Clients[arr[1]];
                        client.ReciveAns(time);
                        //Номер региона;номер запроса в регионе;номер запроса;
                        //номер клиента;номер региона клиента; время задержки; время
                        string output = String.Format(
                            "{0};{1};{2};{3};{4};{5:F2};{6:F2};{7}",
                            Region_num, TOTAL_QUERY_COUNT, arr[0], arr[1], arr[2],
                            client.recive_time, time, local_queue.Count);
                        OutputHandler.WriteLine(output);
                    }
                    else
                    {
                        AnotherQueries.Add(arr);
                    }
                    if (cl.GetQueueCount() > 0)
                    {
                        cl.SetQueryTime();
                    }
                    flag = true;
                }
            }
            return(flag);
        }