Esempio n. 1
0
 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());
 }
Esempio n. 2
0
 /**
  * @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);
     }
 }