Overview

Namespaces

  • bandwidthThrottle
    • tokenBucket
      • storage
        • scope

Classes

  • bandwidthThrottle\tokenBucket\BlockingConsumer
  • bandwidthThrottle\tokenBucket\Rate
  • bandwidthThrottle\tokenBucket\storage\FileStorage
  • bandwidthThrottle\tokenBucket\storage\IPCStorage
  • bandwidthThrottle\tokenBucket\storage\MemcachedStorage
  • bandwidthThrottle\tokenBucket\storage\MemcacheStorage
  • bandwidthThrottle\tokenBucket\storage\PDOStorage
  • bandwidthThrottle\tokenBucket\storage\PHPRedisStorage
  • bandwidthThrottle\tokenBucket\storage\PredisStorage
  • bandwidthThrottle\tokenBucket\storage\SessionStorage
  • bandwidthThrottle\tokenBucket\storage\SingleProcessStorage
  • bandwidthThrottle\tokenBucket\TokenBucket

Interfaces

  • bandwidthThrottle\tokenBucket\storage\scope\GlobalScope
  • bandwidthThrottle\tokenBucket\storage\scope\RequestScope
  • bandwidthThrottle\tokenBucket\storage\scope\SessionScope
  • bandwidthThrottle\tokenBucket\storage\Storage

Exceptions

  • bandwidthThrottle\tokenBucket\storage\StorageException
  • bandwidthThrottle\tokenBucket\TimeoutException
  • bandwidthThrottle\tokenBucket\TokenBucketException
  • Overview
  • Namespace
  • Class
 1:  2:  3:  4:  5:  6:  7:  8:  9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 
<?php

namespace bandwidthThrottle\tokenBucket;

/**
 * The rate.
 *
 * @author Markus Malkusch <markus@malkusch.de>
 * @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations
 * @license WTFPL
 */
final class Rate
{
    
    const MICROSECOND = "microsecond";
    const MILLISECOND = "millisecond";
    const SECOND = "second";
    const MINUTE = "minute";
    const HOUR   = "hour";
    const DAY    = "day";
    const WEEK   = "week";
    const MONTH  = "month";
    const YEAR   = "year";

    /**
     * @var double[] Mapping between units and seconds
     */
    private static $unitMap = [
        self::MICROSECOND =>        0.000001,
        self::MILLISECOND =>        0.001,
        self::SECOND      =>        1,
        self::MINUTE      =>       60,
        self::HOUR        =>     3600,
        self::DAY         =>    86400,
        self::WEEK        =>   604800,
        self::MONTH       =>  2629743.83,
        self::YEAR        => 31556926,
    ];
    
    /**
     * @var int The amount of tokens to produce for the unit.
     */
    private $tokens;

    /**
     * @var string The unit.
     */
    private $unit;
    
    /**
     * Sets the amount of tokens which will be produced per unit.
     *
     * E.g. new Rate(100, Rate::SECOND) will produce 100 tokens per second.
     *
     * @param int    $tokens positive amount of tokens to produce per unit
     * @param string $unit   unit as one of Rate's constants
     */
    public function __construct($tokens, $unit)
    {
        if (!isset(self::$unitMap[$unit])) {
            throw new \InvalidArgumentException("Not a valid unit.");
        }
        if ($tokens <= 0) {
            throw new \InvalidArgumentException("Amount of tokens should be greater then 0.");
        }
        $this->tokens = $tokens;
        $this->unit   = $unit;
    }

    /**
     * Returns the rate in Tokens per second.
     *
     * @return double The rate.
     * @internal
     */
    public function getTokensPerSecond()
    {
        return $this->tokens / self::$unitMap[$this->unit];
    }
}
API documentation generated by ApiGen