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

namespace IlluminateQueueJobs;

use 
DateTime;
use 
IlluminateSupportArr;
use 
IlluminateSupportStr;

abstract class 
Job
{
    
/**
     * The job handler instance.
     *
     * @var mixed
     */
    
protected $instance;

    
/**
     * The IoC container instance.
     *
     * @var IlluminateContainerContainer
     */
    
protected $container;

    
/**
     * The name of the queue the job belongs to.
     *
     * @var string
     */
    
protected $queue;

    
/**
     * Indicates if the job has been deleted.
     *
     * @var bool
     */
    
protected $deleted false;

    
/**
     * Indicates if the job has been released.
     *
     * @var bool
     */
    
protected $released false;

    
/**
     * Fire the job.
     *
     * @return void
     */
    
abstract public function fire();

    
/**
     * Delete the job from the queue.
     *
     * @return void
     */
    
public function delete()
    {
        
$this->deleted true;
    }

    
/**
     * Determine if the job has been deleted.
     *
     * @return bool
     */
    
public function isDeleted()
    {
        return 
$this->deleted;
    }

    
/**
     * Release the job back into the queue.
     *
     * @param  int   $delay
     * @return void
     */
    
public function release($delay 0)
    {
        
$this->released true;
    }

    
/**
     * Determine if the job was released back into the queue.
     *
     * @return bool
     */
    
public function isReleased()
    {
        return 
$this->released;
    }

    
/**
     * Determine if the job has been deleted or released.
     *
     * @return bool
     */
    
public function isDeletedOrReleased()
    {
        return 
$this->isDeleted() || $this->isReleased();
    }

    
/**
     * Get the number of times the job has been attempted.
     *
     * @return int
     */
    
abstract public function attempts();

    
/**
     * Get the raw body string for the job.
     *
     * @return string
     */
    
abstract public function getRawBody();

    
/**
     * Resolve and fire the job handler method.
     *
     * @param  array  $payload
     * @return void
     */
    
protected function resolveAndFire(array $payload)
    {
        list(
$class$method) = $this->parseJob($payload['job']);

        
$this->instance $this->resolve($class);

        
$this->instance->{$method}($this$this->resolveQueueableEntities($payload['data']));
    }

    
/**
     * Parse the job declaration into class and method.
     *
     * @param  string  $job
     * @return array
     */
    
protected function parseJob($job)
    {
        
$segments explode('@'$job);

        return 
count($segments) > $segments : [$segments[0], 'fire'];
    }

    
/**
     * Resolve the given job handler.
     *
     * @param  string  $class
     * @return mixed
     */
    
protected function resolve($class)
    {
        return 
$this->container->make($class);
    }

    
/**
     * Resolve all of the queueable entities in the given payload.
     *
     * @param  mixed  $data
     * @return mixed
     */
    
protected function resolveQueueableEntities($data)
    {
        if (
is_string($data)) {
            return 
$this->resolveQueueableEntity($data);
        }

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

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

        return 
$data;
    }

    
/**
     * Resolve a single queueable entity from the resolver.
     *
     * @param  mixed  $value
     * @return IlluminateContractsQueueQueueableEntity
     */
    
protected function resolveQueueableEntity($value)
    {
        if (
is_string($value) && Str::startsWith($value'::entity::')) {
            list(
$marker$type$id) = explode('|'$value3);

            return 
$this->getEntityResolver()->resolve($type$id);
        }

        return 
$value;
    }

    
/**
     * Call the failed method on the job instance.
     *
     * @return void
     */
    
public function failed()
    {
        
$payload json_decode($this->getRawBody(), true);

        list(
$class$method) = $this->parseJob($payload['job']);

        
$this->instance $this->resolve($class);

        if (
method_exists($this->instance'failed')) {
            
$this->instance->failed($this->resolveQueueableEntities($payload['data']));
        }
    }

    
/**
     * Get an entity resolver instance.
     *
     * @return IlluminateContractsQueueEntityResolver
     */
    
protected function getEntityResolver()
    {
        return 
$this->container->make('IlluminateContractsQueueEntityResolver');
    }

    
/**
     * 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 system time.
     *
     * @return int
     */
    
protected function getTime()
    {
        return 
time();
    }

    
/**
     * Get the name of the queued job class.
     *
     * @return string
     */
    
public function getName()
    {
        return 
json_decode($this->getRawBody(), true)['job'];
    }

    
/**
     * Get the resolved name of the queued job class.
     *
     * @return string
     */
    
public function resolveName()
    {
        
$name $this->getName();

        
$payload json_decode($this->getRawBody(), true);

        if (
$name === 'IlluminateQueueCallQueuedHandler@call') {
            return 
Arr::get($payload'data.commandName'$name);
        }

        if (
$name === 'IlluminateEventsCallQueuedHandler@call') {
            return 
$payload['data']['class'].'@'.$payload['data']['method'];
        }

        return 
$name;
    }

    
/**
     * Get the name of the queue the job belongs to.
     *
     * @return string
     */
    
public function getQueue()
    {
        return 
$this->queue;
    }
}
Онлайн: 2
Реклама