Ejemplo n.º 1
0
        /*
         *   Сформировать новую задачу.
         */
        public SubTask getTask(long id)
        {
            lock (executionLock)
            {
                if (completed)
                {
                    return(null);                           // Нет смысла формировать задачи
                }
                if (processedTasks.ContainsKey(id))         // Возвращаем задачу клиенту, если он забыл о ней
                {
                    return(processedTasks[id]);
                }

                //-------------------------------------  БЛОК, КОТОРЫЙ ВЫ ДОЛЖНЫ ПОМЕНЯТЬ!
                // Описана сама логика формирования нового задания
                // Рассматриваю свой случай
                if (sequences != null && sequences.Count() >= 2) // Если в куче сырья только один элемент,
                {                                                // то сортировка закончена
                    List <int> seq1;
                    List <int> seq2;
                    seq1 = sequences.First();                   // достали один элемент
                    sequences.RemoveAt(0);
                    seq2 = sequences.First();                   // достали второй элемент
                    sequences.RemoveAt(0);
                    SubTask task = new SubTask(seq1, seq2);     // создали новое задание
                    processedTasks.Add(id, task);               // сохранили его в базе
                    lastTaskCreation = DateTime.Now;            // засекли время создания
                    return(task);                               // вернули новую задачу клиенту.
                }
                //-------------------------------------------
                return(null);
            }
        }
Ejemplo n.º 2
0
 // Сдать задачу
 public void complete(long id, SubTask task)
 {
     lock (executionLock)
     {
         if (processedTasks.ContainsKey(id))             // Все задания записаны в базе
         {                                               // Нет в базе - сбой
             if (task.haveResult())                      // Задание выполнено?
             {
                 //---------------------------------------------------------------- ЗАМЕНИТЬ
                 sequences.Add(task.getResult());                       // Возвращаем результат в сырье
                 processedTasks.Remove(id);                             // Удаляем задачу из реестра
                 if (sequences.Count == 1 && processedTasks.Count == 0) // Проверяем на окончание вычислений
                 {
                     completed = true;
                 }
                 //----------------------------------------------------------------
             }
         }
     }
 }
Ejemplo n.º 3
0
 public void start()
 {
     try
     {
         channel = new TcpChannel();
         ChannelServices.RegisterChannel(channel, false);
         Console.WriteLine("Введите адрес сервера (tcp://localhost:8080/RemoteTask)");
         string addr = Console.ReadLine();
         server = (RemoteTask)Activator.GetObject(typeof(RemoteTask), addr);
         id = server.joinToServer();
         while (true)
         {
             myTask = server.getTask(id);
             if (myTask != null)
             {
                 myTask.execute();
                 server.complete(id, myTask);
                 taskCount++;
                 Console.Clear();
                 Console.WriteLine("Выполнено задач: " + taskCount);
             }
             else
             {
                 Thread.Sleep(1000);
                 Console.Clear();
                 Console.WriteLine("Ожидаю задачу...");
             }
         }
     }
     catch (SystemException)
     {
         Console.WriteLine("Соединение было потеряно, завершение работы.\n" 
                 + "Нажмите для продолжения...");
     }
     
 }
Ejemplo n.º 4
0
 // Сдать задачу
 public void complete(long id, SubTask task)
 {
     lock (executionLock)
     {
         if (processedTasks.ContainsKey(id))             // Все задания записаны в базе
         {                                               // Нет в базе - сбой
             if (task.haveResult())                      // Задание выполнено?
             {
                 //---------------------------------------------------------------- ЗАМЕНИТЬ
                 sequences.Add(task.getResult());        // Возвращаем результат в сырье 
                 processedTasks.Remove(id);              // Удаляем задачу из реестра
                 if (sequences.Count == 1 && processedTasks.Count == 0)  // Проверяем на окончание вычислений
                 {
                     completed = true;
                 }
                 //----------------------------------------------------------------
             }
         }
     }
 }
Ejemplo n.º 5
0
        /*
        *   Сформировать новую задачу. 
        */
        public SubTask getTask(long id)
        {
            lock (executionLock)
            {
                if (completed) return null;                 // Нет смысла формировать задачи
                if (processedTasks.ContainsKey(id))         // Возвращаем задачу клиенту, если он забыл о ней
                {
                    return processedTasks[id];
                }

                //-------------------------------------  БЛОК, КОТОРЫЙ ВЫ ДОЛЖНЫ ПОМЕНЯТЬ!
                // Описана сама логика формирования нового задания
                // Рассматриваю свой случай
                if (sequences != null && sequences.Count() >= 2) // Если в куче сырья только один элемент, 
                {                                                // то сортировка закончена
                    List<int> seq1;
                    List<int> seq2;
                    seq1 = sequences.First();                   // достали один элемент
                    sequences.RemoveAt(0);
                    seq2 = sequences.First();                   // достали второй элемент
                    sequences.RemoveAt(0);
                    SubTask task = new SubTask(seq1, seq2);     // создали новое задание
                    processedTasks.Add(id, task);               // сохранили его в базе 
                    lastTaskCreation = DateTime.Now;            // засекли время создания
                    return task;                                // вернули новую задачу клиенту.
                }
                //-------------------------------------------
                return null;
            }
        }