1 | <?php |
||
21 | class Client implements ClientInterface |
||
22 | { |
||
23 | /** |
||
24 | * Database handler |
||
25 | * @var PDO |
||
26 | */ |
||
27 | private $pdo; |
||
28 | |||
29 | /** |
||
30 | * Base uri |
||
31 | * @var string |
||
32 | */ |
||
33 | private $base; |
||
34 | |||
35 | /** |
||
36 | * User-agent |
||
37 | * @var string |
||
38 | */ |
||
39 | private $userAgent; |
||
40 | |||
41 | /** |
||
42 | * Delay |
||
43 | * @var float|int |
||
44 | */ |
||
45 | private $delay; |
||
46 | |||
47 | /** |
||
48 | * Client constructor. |
||
49 | * |
||
50 | * @param PDO $pdo |
||
51 | * @param string $baseUri |
||
52 | * @param string $userAgent |
||
53 | * @param float|int $delay |
||
54 | * @throws DatabaseException |
||
55 | */ |
||
56 | public function __construct(PDO $pdo, $baseUri, $userAgent, $delay) |
||
63 | |||
64 | /** |
||
65 | * Queue |
||
66 | * |
||
67 | * @return float|int |
||
68 | */ |
||
69 | public function checkQueue() |
||
70 | { |
||
71 | if ($this->delay == 0) { |
||
72 | return 0; |
||
73 | } |
||
74 | $query = $this->pdo->prepare(<<<SQL |
||
75 | SELECT GREATEST(0, (delayUntil / 1000000) - UNIX_TIMESTAMP(CURTIME(6))) AS sec |
||
76 | FROM robotstxt__delay0 |
||
77 | WHERE base = :base AND userAgent = :userAgent; |
||
78 | SQL |
||
79 | ); |
||
80 | $query->bindParam(':base', $this->base, PDO::PARAM_STR); |
||
81 | $query->bindParam(':userAgent', $this->userAgent, PDO::PARAM_STR); |
||
82 | $query->execute(); |
||
83 | if ($query->rowCount() > 0) { |
||
84 | $row = $query->fetch(PDO::FETCH_ASSOC); |
||
85 | return $row['sec']; |
||
86 | } |
||
87 | return 0; |
||
88 | } |
||
89 | |||
90 | /** |
||
91 | * Reset queue |
||
92 | * |
||
93 | * @param float|int|null $delay |
||
94 | * @return bool |
||
95 | */ |
||
96 | public function reset($delay = null) |
||
121 | |||
122 | /** |
||
123 | * Sleep |
||
124 | * |
||
125 | * @return float|int |
||
126 | */ |
||
127 | public function sleep() |
||
141 | |||
142 | /** |
||
143 | * Timestamp with milliseconds |
||
144 | * |
||
145 | * @return float|int |
||
146 | * @throws DatabaseException |
||
147 | */ |
||
148 | public function getTimeSleepUntil() |
||
174 | |||
175 | /** |
||
176 | * Set new delayUntil timestamp |
||
177 | * |
||
178 | * @return bool |
||
179 | */ |
||
180 | private function increment() |
||
195 | } |
||
196 |