public static function processTaskQueue() { set_time_limit(0); ignore_user_abort(1); $db = BFL_Database::getInstance(); $lock_tables = array(DB_TABLE_JUDGER . ' write', DB_TABLE_RECORD . ' write', DB_TABLE_RECORDMETA . ' write', DB_TABLE_PROB . ' read'); $db->lock($lock_tables, true); //Get Available Judger $judger = MDL_Judger_Set::getAvailableJudger(); if ($judger == NULL) { $db->unlock(); return 'nojudger'; } $judger_id = $judger->getID(); $task = self::getTask(); if (!$task) { $db->unlock(); return 'notask'; } //Pend task MDL_Judge_Record::pend($task['record_id'], $judger_id); //lock judger $judger->lock(); $db->unlock(); //upload source $task['src_name'] = self::getSrcname($task['task_name'], $task['language']); MDL_Judger_Transmit::sendTask($judger, $task['task_name'], $task['source'], $task['src_name']); //send judge request $config = MDL_Config::getInstance(); MDL_Judger_Access::sendRequest($judger, $task); }
public function ACT_connect() { $judger_id = (int) $this->path_option->getPathSection(2); if ($judger_id != 0) { $judger = new MDL_Judger($judger_id); $state = MDL_Judger_Access::getState($judger); } else { $this->notFound(array('specifier' => 'judger')); } $this->view->state = $state; $this->view->display('judger/connect.php'); }
public static function stop($record_id) { $record = new MDL_Record($record_id); $judger_id = $record->getJudger()->getID(); $record_meta = $record->getInfo()->getRecordMeta(); $status = $record_meta->getVar('status'); if ($status == MDL_Judge_Record::STATUS_STOPPED) { return; } $record_meta->setVar('status', MDL_Judge_Record::STATUS_STOPPED); $record_meta->setVar('result_text', MDL_Judge_Record::RESULT_EXECUTOR_ERROR); $task_name = $record->getTaskName(); if ($judger_id != 0) { MDL_Judger_Access::stopJudge($task_name, $record->getJudger()); if ($status != MDL_Judge_Record::STATUS_WAITING) { $record->getJudger()->unlock(); } } }