public function receive(array $options = [])
{
$finder = new Finder();
$finder->files()->ignoreDotFiles(true)->ignoreUnreadableDirs(true)->ignoreVCS(true)->name('*.json')->in($this->queuePath);
if ($this->options['message_delay'] > 0) {
$finder->date(sprintf('< %d seconds ago', $this->options['message_delay']));
}
$finder->date(sprintf('> %d seconds ago', $this->options['message_expiration']));
$messages = [];
/** @var SplFileInfo $file */
foreach ($finder as $file) {
$filePointer = fopen($file->getRealPath(), 'r+');
$id = substr($file->getFilename(), 0, -5);
if (!isset($this->filePointerList[$id]) && flock($filePointer, LOCK_EX | LOCK_NB)) {
$this->filePointerList[$id] = $filePointer;
$messages[] = new Message($id, json_decode($file->getContents(), true), []);
} else {
fclose($filePointer);
}
if (count($messages) === (int) $this->options['messages_to_receive']) {
break;
}
}
return $messages;
}