Файл: gapps/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php
Строк: 113
<?php
namespace IlluminateConsoleScheduling;
use LogicException;
use InvalidArgumentException;
use IlluminateContractsContainerContainer;
class CallbackEvent extends Event
{
/**
* The callback to call.
*
* @var string
*/
protected $callback;
/**
* The parameters to pass to the method.
*
* @var array
*/
protected $parameters;
/**
* Create a new event instance.
*
* @param string $callback
* @param array $parameters
* @return void
*
* @throws InvalidArgumentException
*/
public function __construct($callback, array $parameters = [])
{
if (! is_string($callback) && ! is_callable($callback)) {
throw new InvalidArgumentException(
'Invalid scheduled callback event. Must be string or callable.'
);
}
$this->callback = $callback;
$this->parameters = $parameters;
}
/**
* Run the given event.
*
* @param IlluminateContractsContainerContainer $container
* @return mixed
*
* @throws Exception
*/
public function run(Container $container)
{
if ($this->description) {
touch($this->mutexPath());
}
try {
$response = $container->call($this->callback, $this->parameters);
} finally {
$this->removeMutex();
}
parent::callAfterCallbacks($container);
return $response;
}
/**
* Remove the mutex file from disk.
*
* @return void
*/
protected function removeMutex()
{
if ($this->description) {
@unlink($this->mutexPath());
}
}
/**
* Do not allow the event to overlap each other.
*
* @return $this
*
* @throws LogicException
*/
public function withoutOverlapping()
{
if (! isset($this->description)) {
throw new LogicException(
"A scheduled event name is required to prevent overlapping. Use the 'name' method before 'withoutOverlapping'."
);
}
return $this->skip(function () {
return file_exists($this->mutexPath());
});
}
/**
* Get the mutex path for the scheduled command.
*
* @return string
*/
protected function mutexPath()
{
return storage_path('framework/schedule-'.sha1($this->description));
}
/**
* Get the summary of the event for display.
*
* @return string
*/
public function getSummaryForDisplay()
{
if (is_string($this->description)) {
return $this->description;
}
return is_string($this->callback) ? $this->callback : 'Closure';
}
}