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

namespace IlluminateQueue;

use 
Closure;
use 
DateTime;
use 
Exception;
use 
IlluminateSupportArr;
use 
SuperClosureSerializer;
use 
IlluminateContainerContainer;
use 
IlluminateContractsEncryptionEncrypter;
use 
IlluminateContractsQueueQueueableEntity;

abstract class 
Queue
{
    
/**
     * The IoC container instance.
     *
     * @var IlluminateContainerContainer
     */
    
protected $container;

    
/**
     * The encrypter implementation.
     *
     * @var IlluminateContractsEncryptionEncrypter
     */
    
protected $encrypter;

    
/**
     * Push a new job onto the queue.
     *
     * @param  string  $queue
     * @param  string  $job
     * @param  mixed   $data
     * @return mixed
     */
    
public function pushOn($queue$job$data '')
    {
        return 
$this->push($job$data$queue);
    }

    
/**
     * Push a new job onto the queue after a delay.
     *
     * @param  string  $queue
     * @param  DateTime|int  $delay
     * @param  string  $job
     * @param  mixed   $data
     * @return mixed
     */
    
public function laterOn($queue$delay$job$data '')
    {
        return 
$this->later($delay$job$data$queue);
    }

    
/**
     * Push an array of jobs onto the queue.
     *
     * @param  array   $jobs
     * @param  mixed   $data
     * @param  string  $queue
     * @return mixed
     */
    
public function bulk($jobs$data ''$queue null)
    {
        foreach ((array) 
$jobs as $job) {
            
$this->push($job$data$queue);
        }
    }

    
/**
     * Create a payload string from the given job and data.
     *
     * @param  string  $job
     * @param  mixed   $data
     * @param  string  $queue
     * @return string
     */
    
protected function createPayload($job$data ''$queue null)
    {
        if (
$job instanceof Closure) {
            return 
json_encode($this->createClosurePayload($job$data));
        }

        if (
is_object($job)) {
            return 
json_encode([
                
'job' => 'IlluminateQueueCallQueuedHandler@call',
                
'data' => ['commandName' => get_class($job), 'command' => serialize(clone $job)],
            ]);
        }

        return 
json_encode($this->createPlainPayload($job$data));
    }

    
/**
     * Create a typical, "plain" queue payload array.
     *
     * @param  string  $job
     * @param  mixed  $data
     * @return array
     */
    
protected function createPlainPayload($job$data)
    {
        return [
'job' => $job'data' => $this->prepareQueueableEntities($data)];
    }

    
/**
     * Prepare any queueable entities for storage in the queue.
     *
     * @param  mixed  $data
     * @return mixed
     */
    
protected function prepareQueueableEntities($data)
    {
        if (
$data instanceof QueueableEntity) {
            return 
$this->prepareQueueableEntity($data);
        }

        if (
is_array($data)) {
            
$data array_map(function ($d) {
                if (
is_array($d)) {
                    return 
$this->prepareQueueableEntities($d);
                }

                return 
$this->prepareQueueableEntity($d);
            }, 
$data);
        }

        return 
$data;
    }

    
/**
     * Prepare a single queueable entity for storage on the queue.
     *
     * @param  mixed  $value
     * @return mixed
     */
    
protected function prepareQueueableEntity($value)
    {
        if (
$value instanceof QueueableEntity) {
            return 
'::entity::|'.get_class($value).'|'.$value->getQueueableId();
        }

        return 
$value;
    }

    
/**
     * Create a payload string for the given Closure job.
     *
     * @param  Closure  $job
     * @param  mixed     $data
     * @return array
     */
    
protected function createClosurePayload($job$data)
    {
        
$closure $this->getEncrypter()->encrypt((new Serializer)->serialize($job));

        return [
'job' => 'IlluminateQueueClosure''data' => compact('closure')];
    }

    
/**
     * Set additional meta on a payload string.
     *
     * @param  string  $payload
     * @param  string  $key
     * @param  string  $value
     * @return string
     */
    
protected function setMeta($payload$key$value)
    {
        
$payload json_decode($payloadtrue);

        return 
json_encode(Arr::set($payload$key$value));
    }

    
/**
     * Calculate the number of seconds with the given delay.
     *
     * @param  DateTime|int  $delay
     * @return int
     */
    
protected function getSeconds($delay)
    {
        if (
$delay instanceof DateTime) {
            return 
max(0$delay->getTimestamp() - $this->getTime());
        }

        return (int) 
$delay;
    }

    
/**
     * Get the current UNIX timestamp.
     *
     * @return int
     */
    
protected function getTime()
    {
        return 
time();
    }

    
/**
     * Set the IoC container instance.
     *
     * @param  IlluminateContainerContainer  $container
     * @return void
     */
    
public function setContainer(Container $container)
    {
        
$this->container $container;
    }

    
/**
     * Get the encrypter implementation.
     *
     * @return  IlluminateContractsEncryptionEncrypter
     *
     * @throws Exception
     */
    
protected function getEncrypter()
    {
        if (
is_null($this->encrypter)) {
            throw new 
Exception('No encrypter has been set on the Queue.');
        }

        return 
$this->encrypter;
    }

    
/**
     * Set the encrypter implementation.
     *
     * @param  IlluminateContractsEncryptionEncrypter  $encrypter
     * @return void
     */
    
public function setEncrypter(Encrypter $encrypter)
    {
        
$this->encrypter $encrypter;
    }
}
Онлайн: 2
Реклама