示例#1
0
 /**
  *
  * @param nc_search_indexer $indexer
  * @throws nc_search_exception
  * @return boolean is task finished
  */
 public function loop(nc_search_indexer $indexer)
 {
     $cycle_number = 0;
     $save_cycles = nc_search::get_setting('IndexerSaveTaskEveryNthCycle');
     while (true) {
         // stop prematurely:
         if (!$this->check_connection()) {
             $indexer->cancel();
             return true;
             // nobody listens anyway
         }
         if ($this->interrupt_if_needed($indexer, $cycle_number)) {
             return false;
         }
         // сохранять задачу каждые X циклов
         if ($cycle_number % $save_cycles == 0) {
             $indexer->save_task();
         }
         switch ($indexer->next()) {
             case nc_search_indexer::TASK_FINISHED:
                 return true;
                 // we're done
             // we're done
             case nc_search_indexer::TASK_STEP_FINISHED:
                 if ($this->delay) {
                     if ($this->interrupt_if_needed($indexer, $cycle_number)) {
                         return false;
                     }
                     sleep($this->delay);
                 }
                 break;
             case nc_search_indexer::TASK_STEP_SKIPPED:
                 break;
             default:
                 throw new nc_search_exception("Incorrect return value from nc_search_indexer::next()");
         }
         $cycle_number++;
     }
 }