Example #1
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);
     }
 }
Example #2
0
 public function onTick()
 {
     if ($this->queue->count() > 0) {
         $this->queue->socketPerform();
     }
 }
 /**
  * Tests whether 'complete' event on individual Request has been fired
  * when using RequestsQueue
  */
 public function testRequestCompleteEvent()
 {
     $eventFired = 0;
     $req = new cURL\Request();
     $req->getOptions()->set(CURLOPT_URL, $this->createRequestUrl())->set(CURLOPT_RETURNTRANSFER, true);
     $req->addListener('complete', function ($event) use(&$eventFired) {
         $this->validateSuccesfulResponse($event->response);
         $eventFired++;
     });
     $queue = new cURL\RequestsQueue();
     $queue->attach($req);
     $queue->send();
     $this->assertEquals(1, $eventFired);
 }
Example #4
0
 /**
  * Requests which fail very quickly might cause infinite loop and return no response.
  * http://curl.haxx.se/libcurl/c/curl_multi_perform.html
  * "If an added handle fails very quickly, it may never be counted as a running_handle."
  * This test ensures that it won't loop and will return properly error code.
  */
 public function testErrorCode()
 {
     $request = new cURL\Request('');
     $request->addListener('complete', function (cURL\Event $e) {
         $this->assertEquals('<url> malformed', $e->response->getError()->getMessage());
     });
     $queue = new cURL\RequestsQueue();
     $queue->attach($request);
     $queue->send();
 }
 /**
  * Test requests attaching on run time
  * 
  * @return void
  */
 public function testAttachNewOnRuntime()
 {
     $total = 10;
     $test = $this;
     $queue = new cURL\RequestsQueue();
     $queue->getDefaultOptions()->set(CURLOPT_RETURNTRANSFER, true)->set(CURLOPT_ENCODING, '');
     $n = 0;
     $attachNew = function () use($queue, &$n, $total) {
         if ($n < $total) {
             $n++;
             $request = new cURL\Request();
             $request->_path = '/' . $n;
             $request->getOptions()->set(CURLOPT_URL, $this->okTestUrl . $n);
             $queue->attach($request);
         }
     };
     $attachNew();
     $queue->addListener('complete', function (cURL\Event $event) use(&$requests, $test, $attachNew) {
         $test->validateSuccesfulResponse($event->request->_path, $event->response);
         $attachNew();
     });
     $queue->send();
     $this->assertEquals($total, $n);
 }