_items = new PoolQueue($this->maxCreated); } /** * @param PoolQueue $items */ public function setItems(PoolQueue $items): void { $this->_items = $items; } /** * @param mixed $item * @return void */ public function push(mixed $item): void { $this->_items->push($item); } /** * @return bool */ public function isEmpty(): bool { return $this->_items->isEmpty(); } /** * @return bool */ public function size(): bool { return $this->_items->length(); } /** * @return bool */ public function close(): bool { return $this->_items->close(); } /** * @param int $min * @return void */ public function tailor(int $min = 0): void { while ($this->_items->length() > $min) { $connection = $this->_items->pop(0.000001); if ($connection instanceof StopHeartbeatCheck) { $connection->stopHeartbeatCheck(); } $connection = null; $this->created -= 1; } } /** * @param int $waite * @return mixed */ public function pop(int $waite = 10): mixed { if (!$this->_items->isEmpty()) { return $this->_items->pop(); } if ($this->created > $this->maxCreated) { return $this->_items->pop($waite); } $this->created += 1; return call_user_func($this->callback); } }