public function testQueueNotFull() { $robot = new Robot(); $robot->setQueueSize(3); $this->assertTrue($robot->queueNotFull()); $robot->attach(); $this->assertTrue($robot->queueNotFull()); $robot->attach(); $this->assertTrue($robot->queueNotFull()); $robot->attach(); $this->assertFalse($robot->queueNotFull()); $robot->detach(); $this->assertTrue($robot->queueNotFull()); }
/** * @param Robot $robot */ protected function refillRobot(Robot $robot) { if ($robot->rateExceeded()) { return; } while ($robot->queueNotFull() && ($handler = $this->nextRequest())) { $request = $handler->getRequest(); $request->addListener('complete', function (Event $e) use($handler, $robot) { foreach ($e->request->getListeners('complete') as $listener) { $e->request->removeListener('complete', $listener); } $robot->detach(); $event = new RequestCompletedEvent($this, $robot, $e->response, $handler); $this->dispatch('request.completed', $event); $robot->dispatch('request.completed', $event); if (!$this->isPauseRequested()) { $this->refillRobot($robot); } }); $event = new RequestAttachingEvent($this, $robot, $handler); $this->dispatch('request.attaching', $event); $robot->dispatch('request.attaching', $event); $robot->attach(); $this->queue->attach($request); } }