laravel['queue']->connection();
if (! $iron instanceof IronQueue) {
throw new RuntimeException('Iron.io based queue must be default.');
}
$iron->getIron()->updateQueue($this->argument('queue'), $this->getQueueOptions());
$this->line('Queue subscriber added: '.$this->argument('url').'');
}
/**
* Get the queue options.
*
* @return array
*/
protected function getQueueOptions()
{
return [
'push_type' => $this->getPushType(), 'subscribers' => $this->getSubscriberList(),
];
}
/**
* Get the push type for the queue.
*
* @return string
*/
protected function getPushType()
{
if ($this->option('type')) {
return $this->option('type');
}
try {
return $this->getQueue()->push_type;
} catch (Exception $e) {
return 'multicast';
}
}
/**
* Get the current subscribers for the queue.
*
* @return array
*/
protected function getSubscriberList()
{
$subscribers = $this->getCurrentSubscribers();
$url = $this->argument('url');
if (! Str::startsWith($url, ['http://', 'https://'])) {
$url = $this->laravel['url']->to($url);
}
$subscribers[] = ['url' => $url];
return $subscribers;
}
/**
* Get the current subscriber list.
*
* @return array
*/
protected function getCurrentSubscribers()
{
try {
return $this->getQueue()->subscribers;
} catch (Exception $e) {
return [];
}
}
/**
* Get the queue information from Iron.io.
*
* @return object
*/
protected function getQueue()
{
if (isset($this->meta)) {
return $this->meta;
}
return $this->meta = $this->laravel['queue']->getIron()->getQueue($this->argument('queue'));
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return [
['queue', InputArgument::REQUIRED, 'The name of Iron.io queue.'],
['url', InputArgument::REQUIRED, 'The URL to be subscribed.'],
];
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['type', null, InputOption::VALUE_OPTIONAL, 'The push type for the queue.'],
];
}
}