/** * 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; }