protected function process() {
        if($this->limited) {
            if(\microtime(true) < $this->resetTime) {
                $this->client->addTimer(($this->resetTime - \microtime(true)), function () {
                    $this->process();
                });
                
                return;
            }
            
            $this->limited = false;
            $this->remaining = ($this->limit ? $this->limit : \INF);
        }
        
        if(\count($this->queue) === 0) {
            return;
        }
        
        $item = \array_shift($this->queue);
        $this->processItem($item);
    }