From a4f4147b6fe5f2a003a61cf8a8f7508c94130b31 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 26 May 2014 22:49:54 +0200 Subject: WIP --- inc/taskmanager.inc.php | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'inc/taskmanager.inc.php') diff --git a/inc/taskmanager.inc.php b/inc/taskmanager.inc.php index e93cc696..99e35e94 100644 --- a/inc/taskmanager.inc.php +++ b/inc/taskmanager.inc.php @@ -5,12 +5,13 @@ */ class Taskmanager { - + private static $sock = false; - + private static function init() { - if (self::$sock !== false) return; + if (self::$sock !== false) + return; self::$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_set_option(self::$sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 0, 'usec' => 300000)); socket_set_option(self::$sock, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 0, 'usec' => 200000)); @@ -20,7 +21,7 @@ class Taskmanager public static function submit($task, $data, $async = false) { self::init(); - $seq = (string)mt_rand(); + $seq = (string) mt_rand(); if (empty($data)) { $data = '{}'; } else { @@ -32,7 +33,8 @@ class Taskmanager Message::addError('taskmanager-error'); return false; } - if ($async) return true; + if ($async) + return true; $reply = self::readReply($seq); if ($reply === false) { Message::addError('taskmanager-error'); @@ -56,38 +58,50 @@ class Taskmanager public static function status($taskId) { self::init(); - $seq = (string)mt_rand(); + $seq = (string) mt_rand(); $message = "$seq, status, $taskId"; $sent = socket_send(self::$sock, $message, strlen($message), 0); $reply = self::readReply($seq); - if (!is_array($reply)) return false; + if (!is_array($reply)) + return false; return $reply; } - + public static function waitComplete($taskId) { $done = false; for ($i = 0; $i < 10; ++$i) { $status = self::status($taskId); - if (!isset($status['statusCode'])) break; + if (!isset($status['statusCode'])) + break; if ($status['statusCode'] != TASK_PROCESSING && $status['statusCode'] != TASK_WAITING) { $done = true; break; } usleep(150000); } - if ($done) self::release ($taskId); + if ($done) + self::release($taskId); return $status; } + public static function isFailed($task) + { + if (!isset($task['statusCode']) || !isset($task['id'])) + return true; + if ($task['statusCode'] !== TASK_WAITING && $task['statusCode'] !== TASK_PROCESSING && $task['statusCode'] !== TASK_FINISHED) + return true; + return false; + } + public static function release($taskId) { self::init(); - $seq = (string)mt_rand(); + $seq = (string) mt_rand(); $message = "$seq, release, $taskId"; socket_send(self::$sock, $message, strlen($message), 0); } - + /** * * @param type $seq @@ -101,7 +115,8 @@ class Taskmanager if (count($parts) == 2 && $parts[0] == $seq) { return json_decode($parts[1], true); } - if (++$tries > 10) return false; + if (++$tries > 10) + return false; } //error_log(socket_strerror(socket_last_error(self::$sock))); return false; -- cgit v1.2.3-55-g7522