コード例 #1
0
ファイル: SimpleDatabaseQueue.php プロジェクト: avisota/core
 /**
  * Execute a queue and send all messages.
  *
  * @param TransportInterface $transport
  *
  * @param ExecutionConfig    $config
  *
  * @return \Avisota\Transport\TransportStatus[]
  * @internal param QueueInterface $queue
  */
 public function execute(TransportInterface $transport, ExecutionConfig $config = null)
 {
     $timeout = $config && $config->getTimeLimit() > 0 ? time() + $config->getTimeLimit() : PHP_INT_MAX;
     $resultSet = $this->selectRecords($config);
     $results = array();
     if ($config) {
         $decider = $config->getDecider();
     } else {
         $decider = null;
     }
     /**
      * Initialise transport system
      */
     $transport->initialise();
     $duration = 0;
     while (count($resultSet) && time() + $duration < $timeout) {
         $record = array_shift($resultSet);
         $duration = time();
         $status = $this->transport($transport, $decider, $record);
         $duration = time() - $duration;
         if ($status) {
             $results[] = $status;
             $this->connection->delete($this->tableName, array('id' => $record['id']));
         }
     }
     /**
      * Flush transport
      */
     $transport->flush();
     return $results;
 }