Ejemplo n.º 1
0
 /**
  * Endpoint to post a job to queue.
  * @return mixed
  * @throws \yii\web\ServerErrorHttpException When failed to post.
  */
 public function actionPost()
 {
     $job = $this->createJobFromRequest();
     /* @var $queue \vm\queue\Queue */
     if ($this->queue->post($job)) {
         return ['status' => 'okay', 'jobId' => $job->id];
     } else {
         throw new \yii\web\ServerErrorHttpException('Failed to post job');
     }
 }
 /**
  * @param \yii\base\Event $event The event to handle.
  *
  * @return void
  */
 public function routeEvent(\yii\base\Event $event)
 {
     $eventName = $event->name;
     $handler = $this->events[$eventName];
     if (is_callable($handler)) {
         $handler = call_user_func($handler, $this->owner);
     }
     $route = $handler[0];
     unset($handler[0]);
     $data = $handler;
     $this->queue->post(new \vm\queue\Job(['route' => $route, 'data' => $data]));
 }
 /**
  * Call the behavior owner to handle the deferred event.
  *
  * @param \yii\base\Event $event The event to process.
  *
  * @return void
  * @throws \Exception When the sender is not DeferredEventInterface.
  */
 public function postDeferredEvent(\yii\base\Event $event)
 {
     $object = clone $this->owner;
     if (!$this->_hasEventHandlers && !$object instanceof DeferredEventInterface) {
         throw new \Exception('Model is not instance of DeferredEventInterface');
     }
     $handlers = $this->_hasEventHandlers ? $this->events : false;
     $eventName = $event->name;
     if (isset($this->_serializer)) {
         $serializer = $this->_serializer;
     } else {
         $serializer = null;
     }
     $this->queue->post(new \vm\queue\Job(['route' => function () use($object, $eventName, $handlers, $serializer) {
         if ($handlers) {
             $handler = $handlers[$eventName];
             if ($serializer !== null) {
                 try {
                     $unserialized = $serializer->unserialize($handler);
                     $unserialized($object);
                 } catch (\Exception $exc) {
                     return call_user_func([$object, $handler]);
                 }
             } else {
                 return call_user_func([$object, $handler]);
             }
         } else {
             if ($object instanceof DeferredEventInterface) {
                 /* @var $object DeferredEventInterface */
                 return $object->handleDeferredEvent($eventName);
             } else {
                 throw new \Exception("Model doesn't have handlers for the event or is not instance of DeferredEventInterface");
             }
         }
     }]));
 }