Вход Регистрация
Файл: gapps/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php
Строк: 204
<?php

namespace IlluminateBus;

use 
Closure;
use 
RuntimeException;
use 
IlluminatePipelinePipeline;
use 
IlluminateContractsQueueQueue;
use 
IlluminateContractsQueueShouldQueue;
use 
IlluminateContractsContainerContainer;
use 
IlluminateContractsBusQueueingDispatcher;

class 
Dispatcher implements QueueingDispatcher
{
    
/**
     * The container implementation.
     *
     * @var IlluminateContractsContainerContainer
     */
    
protected $container;

    
/**
     * The pipeline instance for the bus.
     *
     * @var IlluminatePipelinePipeline
     */
    
protected $pipeline;

    
/**
     * The pipes to send commands through before dispatching.
     *
     * @var array
     */
    
protected $pipes = [];

    
/**
     * The queue resolver callback.
     *
     * @var Closure|null
     */
    
protected $queueResolver;

    
/**
     * Create a new command dispatcher instance.
     *
     * @param  IlluminateContractsContainerContainer  $container
     * @param  Closure|null  $queueResolver
     * @return void
     */
    
public function __construct(Container $containerClosure $queueResolver null)
    {
        
$this->container $container;
        
$this->queueResolver $queueResolver;
        
$this->pipeline = new Pipeline($container);
    }

    
/**
     * Dispatch a command to its appropriate handler.
     *
     * @param  mixed  $command
     * @return mixed
     */
    
public function dispatch($command)
    {
        if (
$this->queueResolver && $this->commandShouldBeQueued($command)) {
            return 
$this->dispatchToQueue($command);
        } else {
            return 
$this->dispatchNow($command);
        }
    }

    
/**
     * Dispatch a command to its appropriate handler in the current process.
     *
     * @param  mixed  $command
     * @return mixed
     */
    
public function dispatchNow($command)
    {
        return 
$this->pipeline->send($command)->through($this->pipes)->then(function ($command) {
            return 
$this->container->call([$command'handle']);
        });
    }

    
/**
     * Determine if the given command should be queued.
     *
     * @param  mixed  $command
     * @return bool
     */
    
protected function commandShouldBeQueued($command)
    {
        return 
$command instanceof ShouldQueue;
    }

    
/**
     * Dispatch a command to its appropriate handler behind a queue.
     *
     * @param  mixed  $command
     * @return mixed
     *
     * @throws RuntimeException
     */
    
public function dispatchToQueue($command)
    {
        
$connection = isset($command->connection) ? $command->connection null;

        
$queue call_user_func($this->queueResolver$connection);

        if (! 
$queue instanceof Queue) {
            throw new 
RuntimeException('Queue resolver did not return a Queue implementation.');
        }

        if (
method_exists($command'queue')) {
            return 
$command->queue($queue$command);
        } else {
            return 
$this->pushCommandToQueue($queue$command);
        }
    }

    
/**
     * Push the command onto the given queue instance.
     *
     * @param  IlluminateContractsQueueQueue  $queue
     * @param  mixed  $command
     * @return mixed
     */
    
protected function pushCommandToQueue($queue$command)
    {
        if (isset(
$command->queue$command->delay)) {
            return 
$queue->laterOn($command->queue$command->delay$command);
        }

        if (isset(
$command->queue)) {
            return 
$queue->pushOn($command->queue$command);
        }

        if (isset(
$command->delay)) {
            return 
$queue->later($command->delay$command);
        }

        return 
$queue->push($command);
    }

    
/**
     * Set the pipes through which commands should be piped before dispatching.
     *
     * @param  array  $pipes
     * @return $this
     */
    
public function pipeThrough(array $pipes)
    {
        
$this->pipes $pipes;

        return 
$this;
    }
}
Онлайн: 0
Реклама