|
|
- <?php
-
- class DeferredTask {
-
- public static function run() {
- global $pcntl_continue;
-
- $tube = 'switchboard-worker';
- echo "PID " . posix_getpid() . " watching tube: " . $tube . "\n";
- bs()->watch($tube)->ignore('default');
-
- if(isset($pcntl_continue)) {
-
- while($pcntl_continue)
- {
- if(($job=bs()->reserve(2)) == FALSE)
- continue;
-
- self::process($job);
- } // while true
-
- echo "\nBye from pid " . posix_getpid() . "!\n";
-
- } else {
- if(($job=bs()->reserve())) {
- self::process($job);
- }
- }
- }
-
- public static function run_once() {
- $tube = 'switchboard-worker';
- echo "PID " . posix_getpid() . " watching tube: " . $tube . "\n";
- bs()->watch($tube)->ignore('default');
-
- if(($job=bs()->reserve())) {
- self::process($job);
- }
-
- echo "\nBye from pid " . posix_getpid() . "!\n";
- }
-
- public static function queue($class, $method, $args=array(), $delay=0) {
- if(!is_array($args))
- $args = array($args);
-
- bs()->putInTube('switchboard-worker',
- json_encode(array('class'=>$class, 'method'=>$method, 'args'=>$args)),
- 1024, // priority
- $delay, // delay
- 300); // time to run
- }
-
- private static function process(&$jobData) {
- $data = json_decode($jobData->getData());
-
- if(!is_object($data) || !property_exists($data, 'class')) {
- echo "Found bad job:\n";
- print_r($data);
- echo "\n";
- bs()->delete($jobData);
- return;
- }
-
- echo "===============================================\n";
- echo "# Beginning job: " . $data->class . '::' . $data->method . "\n";
-
- call_user_func_array(array($data->class, $data->method), $data->args);
-
- echo "\n# Job Complete\n-----------------------------------------------\n\n";
- bs()->delete($jobData);
- }
-
- }
|