/** * Handle the response read in * * @param array $resp The raw array response * @param resource $s The socket * @param object $tasks The tasks being ran * * @return void * @throws Net_Gearman_Exception */ protected function handleResponse($resp, $s, Net_Gearman_Set $tasks) { if (isset($resp['data']['handle']) && $resp['function'] != 'job_created') { $task = $tasks->getTask($resp['data']['handle']); } switch ($resp['function']) { case 'work_complete': $tasks->tasksCount--; $task->complete(json_decode($resp['data']['result'], true)); break; case 'work_status': $n = (int) $resp['data']['numerator']; $d = (int) $resp['data']['denominator']; $task->status($n, $d); break; case 'work_fail': $tasks->tasksCount--; $task->fail(); break; case 'job_created': $task = array_shift(Net_Gearman_Connection::$waiting[(int) $s]); $task->handle = $resp['data']['handle']; if ($task->type == Net_Gearman_Task::JOB_BACKGROUND) { $task->finished = true; } $tasks->handles[$task->handle] = $task->uniq; break; case 'error': throw new Net_Gearman_Exception('An error occurred'); default: throw new Net_Gearman_Exception('Invalid function ' . $resp['function']); } }