Job.php 966 B

123456789101112131415161718192021222324252627282930313233343536
  1. <?php
  2. namespace fec\component\redisqueue;
  3. use Yii;
  4. class Job
  5. {
  6. protected $queueObject;
  7. protected $payload;
  8. protected $queueName;
  9. public function __construct($queueObject, $payload, $queueName)
  10. {
  11. $this->queueObject = $queueObject;
  12. $this->payload = $payload;
  13. $this->queueName = $queueName;
  14. }
  15. public function run()
  16. {
  17. $this->resolveAndRun(json_decode($this->payload, true));
  18. }
  19. public function getQueueObject()
  20. {
  21. return $this->queueObject;
  22. }
  23. protected function resolveAndRun(array $payload)
  24. {
  25. list($class, $method) = $this->resolveJob($payload['job']);
  26. $instance = Yii::createObject([
  27. 'class' => $class
  28. ]);
  29. $instance->{$method}($this, $payload['data']);
  30. }
  31. protected function resolveJob($job)
  32. {
  33. $segments = explode('@', $job);
  34. return count($segments) > 1 ? $segments : array($segments[0], 'run');
  35. }
  36. }