File Manager Lite
Dir:
/home/codewavebd/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Bus
Upload
[..]
DispatchesJobs.php (573 B)
Edit
Rename
Del
PendingDispatch.php (6.61 KB)
Edit
Rename
Del
Edit: PendingDispatch.php
<?php namespace Illuminate\Foundation\Bus; use Illuminate\Bus\DebounceLock; use Illuminate\Bus\UniqueLock; use Illuminate\Container\Container; use Illuminate\Contracts\Bus\Dispatcher; use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Queue\PreparesForDispatch; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Foundation\Queue\InteractsWithUniqueJobs; use Illuminate\Queue\Attributes\DebounceFor; use Illuminate\Queue\Attributes\ReadsQueueAttributes; use Illuminate\Support\Traits\Conditionable; use LogicException; class PendingDispatch { use Conditionable, InteractsWithUniqueJobs, ReadsQueueAttributes; /** * The job. * * @var mixed */ protected $job; /** * Indicates if the job should be dispatched immediately after sending the response. * * @var bool */ protected $afterResponse = false; /** * Create a new pending job dispatch. * * @param mixed $job */ public function __construct($job) { $this->job = $job; } /** * Set the desired connection for the job. * * @param \BackedEnum|string|null $connection * @return $this */ public function onConnection($connection) { $this->job->onConnection($connection); return $this; } /** * Set the desired queue for the job. * * @param \BackedEnum|string|null $queue * @return $this */ public function onQueue($queue) { $this->job->onQueue($queue); return $this; } /** * Set the desired job "group". * * This feature is only supported by some queues, such as Amazon SQS. * * @param \UnitEnum|string $group * @return $this */ public function onGroup($group) { $this->job->onGroup($group); return $this; } /** * Set the desired job deduplicator callback. * * This feature is only supported by some queues, such as Amazon SQS FIFO. * * @param callable|null $deduplicator * @return $this */ public function withDeduplicator($deduplicator) { $this->job->withDeduplicator($deduplicator); return $this; } /** * Set the desired connection for the chain. * * @param \BackedEnum|string|null $connection * @return $this */ public function allOnConnection($connection) { $this->job->allOnConnection($connection); return $this; } /** * Set the desired queue for the chain. * * @param \BackedEnum|string|null $queue * @return $this */ public function allOnQueue($queue) { $this->job->allOnQueue($queue); return $this; } /** * Set the desired delay in seconds for the job. * * @param \DateTimeInterface|\DateInterval|int|null $delay * @return $this */ public function delay($delay) { $this->job->delay($delay); return $this; } /** * Set the delay for the job to zero seconds. * * @return $this */ public function withoutDelay() { $this->job->withoutDelay(); return $this; } /** * Indicate that the job should be dispatched after all database transactions have committed. * * @return $this */ public function afterCommit() { $this->job->afterCommit(); return $this; } /** * Indicate that the job should not wait until database transactions have been committed before dispatching. * * @return $this */ public function beforeCommit() { $this->job->beforeCommit(); return $this; } /** * Set the jobs that should run if this job is successful. * * @param array $chain * @return $this */ public function chain($chain) { $this->job->chain($chain); return $this; } /** * Indicate that the job should be dispatched after the response is sent to the browser. * * @param bool $afterResponse * @return $this */ public function afterResponse($afterResponse = true) { $this->afterResponse = $afterResponse; return $this; } /** * Determine if the job should be dispatched. * * @return bool */ protected function shouldDispatch() { if ($this->job instanceof PreparesForDispatch && $this->job->prepareForDispatch() === false) { return false; } if (! $this->job instanceof ShouldBeUnique) { return true; } return (new UniqueLock(Container::getInstance()->make(Cache::class))) ->acquire($this->job); } /** * Acquire a debounce lock for the job and set its delay. * * @return void * * @throws LogicException */ protected function acquireDebounceLock() { $debounceFor = $this->getAttributeValue($this->job, DebounceFor::class, 'debounceFor'); if ($debounceFor === null) { return; } $lock = new DebounceLock(Container::getInstance()->make(Cache::class)); if ($this->job instanceof ShouldBeUnique) { throw new LogicException('A debounced job cannot also implement ShouldBeUnique.'); } $result = $lock->acquire( $this->job, $debounceFor ); $this->job->debounceOwner = $result['owner']; if (is_null($this->job->delay)) { $this->job->delay = $result['maxWaitExceeded'] ? 0 : $debounceFor; } } /** * Get the underlying job instance. * * @return mixed */ public function getJob() { return $this->job; } /** * Dynamically proxy methods to the underlying job. * * @param string $method * @param array $parameters * @return $this */ public function __call($method, $parameters) { $this->job->{$method}(...$parameters); return $this; } /** * Handle the object's destruction. * * @return void */ public function __destruct() { $this->addUniqueJobInformationToContext($this->job); if (! $this->shouldDispatch()) { $this->removeUniqueJobInformationFromContext($this->job); return; } $this->acquireDebounceLock(); if ($this->afterResponse) { app(Dispatcher::class)->dispatchAfterResponse($this->job); } else { app(Dispatcher::class)->dispatch($this->job); } $this->removeUniqueJobInformationFromContext($this->job); } }
Simpan