Viewing file: DurationLimiterBuilder.php (2.56 KB) -rwxrwxrwx Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Redis\Limiters;
use Illuminate\Contracts\Redis\LimiterTimeoutException; use Illuminate\Support\InteractsWithTime;
class DurationLimiterBuilder { use InteractsWithTime;
/** * The Redis connection. * * @var \Illuminate\Redis\Connections\Connection */ public $connection;
/** * The name of the lock. * * @var string */ public $name;
/** * The maximum number of locks that can be obtained per time window. * * @var int */ public $maxLocks;
/** * The amount of time the lock window is maintained. * * @var int */ public $decay;
/** * The amount of time to block until a lock is available. * * @var int */ public $timeout = 3;
/** * Create a new builder instance. * * @param \Illuminate\Redis\Connections\Connection $connection * @param string $name * @return void */ public function __construct($connection, $name) { $this->name = $name; $this->connection = $connection; }
/** * Set the maximum number of locks that can be obtained per time window. * * @param int $maxLocks * @return $this */ public function allow($maxLocks) { $this->maxLocks = $maxLocks;
return $this; }
/** * Set the amount of time the lock window is maintained. * * @param \DateTimeInterface|\DateInterval|int $decay * @return $this */ public function every($decay) { $this->decay = $this->secondsUntil($decay);
return $this; }
/** * Set the amount of time to block until a lock is available. * * @param int $timeout * @return $this */ public function block($timeout) { $this->timeout = $timeout;
return $this; }
/** * Execute the given callback if a lock is obtained, otherwise call the failure callback. * * @param callable $callback * @param callable|null $failure * @return mixed * * @throws \Illuminate\Contracts\Redis\LimiterTimeoutException */ public function then(callable $callback, callable $failure = null) { try { return (new DurationLimiter( $this->connection, $this->name, $this->maxLocks, $this->decay ))->block($this->timeout, $callback); } catch (LimiterTimeoutException $e) { if ($failure) { return $failure($e); }
throw $e; } } }
|