| 
						 | 
						- <?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);
 -   }
 - 
 - }
 
 
  |