diff --git a/composer.json b/composer.json index c726057..fd91b1e 100644 --- a/composer.json +++ b/composer.json @@ -65,6 +65,9 @@ "tracy/tracy" : "~2.4", + "contributte/event-dispatcher": "~0.5", + "contributte/console": "~0.6", + "pds/skeleton" : "~1.0" }, diff --git a/src/IPub/MQTTClient/DI/MQTTClientExtension.php b/src/IPub/MQTTClient/DI/MQTTClientExtension.php index 84ffda5..a04b9de 100644 --- a/src/IPub/MQTTClient/DI/MQTTClientExtension.php +++ b/src/IPub/MQTTClient/DI/MQTTClientExtension.php @@ -22,6 +22,8 @@ use BinSoul\Net\Mqtt; +use Symfony\Component\EventDispatcher; + use React; use Psr\Log; @@ -29,6 +31,7 @@ use IPub\MQTTClient; use IPub\MQTTClient\Client; use IPub\MQTTClient\Commands; +use IPub\MQTTClient\Events; use IPub\MQTTClient\Logger; /** @@ -49,7 +52,7 @@ final class MQTTClientExtension extends DI\CompilerExtension * @var array */ private $defaults = [ - 'broker' => [ + 'broker' => [ 'httpHost' => NULL, 'port' => 1883, 'address' => NULL, @@ -62,7 +65,7 @@ final class MQTTClientExtension extends DI\CompilerExtension 'sslSettings' => [], ], ], - 'connection' => [ + 'connection' => [ 'username' => '', 'password' => '', 'clientID' => '', @@ -70,8 +73,9 @@ final class MQTTClientExtension extends DI\CompilerExtension 'protocol' => 4, 'clean' => TRUE, ], - 'loop' => NULL, - 'console' => FALSE, + 'loop' => NULL, + 'console' => FALSE, + 'symfonyEvets' => FALSE, ]; /** @@ -135,7 +139,7 @@ public function loadConfiguration() 'configuration' => $clientConfiguration, ]); - if ($configuration['console'] === NULL) { + if ($configuration['console'] === TRUE) { // Define all console commands $commands = [ 'client' => Commands\ClientCommand::class, @@ -148,6 +152,99 @@ public function loadConfiguration() } } + /** + * {@inheritdoc} + */ + public function beforeCompile() + { + parent::beforeCompile(); + + // Get container builder + $builder = $this->getContainerBuilder(); + + // Merge extension default config + $this->setConfig(DI\Config\Helpers::merge($this->config, DI\Helpers::expand($this->defaults, $builder->parameters))); + + // Get extension configuration + $configuration = $this->getConfig(); + + // Get container builder + $builder = $this->getContainerBuilder(); + + if ($configuration['symfonyEvets'] === TRUE) { + $dispatcher = $builder->getDefinition($builder->getByType(EventDispatcher\EventDispatcherInterface::class)); + + $client = $builder->getDefinition($builder->getByType(Client\Client::class)); + assert($client instanceof DI\ServiceDefinition); + + $client->addSetup('?->onStart[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\StartEvent::class), + ]); + $client->addSetup('?->onOpen[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\OpenEvent::class), + ]); + $client->addSetup('?->onConnect[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\ConnectEvent::class), + ]); + $client->addSetup('?->onDisconnect[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\DisconnectEvent::class), + ]); + $client->addSetup('?->onClose[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\CloseEvent::class), + ]); + $client->addSetup('?->onPing[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\PingEvent::class), + ]); + $client->addSetup('?->onPong[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\PongEvent::class), + ]); + $client->addSetup('?->onPublish[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\PublishEvent::class), + ]); + $client->addSetup('?->onSubscribe[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\SubscribeEvent::class), + ]); + $client->addSetup('?->onUnsubscribe[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\UnsubscribeEvent::class), + ]); + $client->addSetup('?->onMessage[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\MessageEvent::class), + ]); + $client->addSetup('?->onWarning[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\WarningEvent::class), + ]); + $client->addSetup('?->onError[] = function() {?->dispatch(new ?(...func_get_args()));}', [ + '@self', + $dispatcher, + new Nette\PhpGenerator\PhpLiteral(Events\ErrorEvent::class), + ]); + } + } + /** * @param Nette\Configurator $config * @param string $extensionName diff --git a/src/IPub/MQTTClient/Events/CloseEvent.php b/src/IPub/MQTTClient/Events/CloseEvent.php new file mode 100644 index 0000000..5b901c5 --- /dev/null +++ b/src/IPub/MQTTClient/Events/CloseEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Connection close event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class CloseEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Connection $connection + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Connection $connection, + Client\IClient $client + ) { + $this->connection = $connection; + $this->client = $client; + } + + /** + * @return Mqtt\Connection + */ + public function getConnection() : Mqtt\Connection + { + return $this->connection; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/ConnectEvent.php b/src/IPub/MQTTClient/Events/ConnectEvent.php new file mode 100644 index 0000000..d9b2f4f --- /dev/null +++ b/src/IPub/MQTTClient/Events/ConnectEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Connected event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class ConnectEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Connection $connection + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Connection $connection, + Client\IClient $client + ) { + $this->connection = $connection; + $this->client = $client; + } + + /** + * @return Mqtt\Connection + */ + public function getConnection() : Mqtt\Connection + { + return $this->connection; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/DisconnectEvent.php b/src/IPub/MQTTClient/Events/DisconnectEvent.php new file mode 100644 index 0000000..72e2d08 --- /dev/null +++ b/src/IPub/MQTTClient/Events/DisconnectEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Disconnected event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class DisconnectEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Connection $connection + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Connection $connection, + Client\IClient $client + ) { + $this->connection = $connection; + $this->client = $client; + } + + /** + * @return Mqtt\Connection + */ + public function getConnection() : Mqtt\Connection + { + return $this->connection; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/ErrorEvent.php b/src/IPub/MQTTClient/Events/ErrorEvent.php new file mode 100644 index 0000000..5edf6f4 --- /dev/null +++ b/src/IPub/MQTTClient/Events/ErrorEvent.php @@ -0,0 +1,72 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Exception; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Communication error event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class ErrorEvent extends EventDispatcher\Event +{ + /** + * @var Exception + */ + private $exception; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Exception $exception + * @param Client\IClient $client + */ + public function __construct( + Exception $exception, + Client\IClient $client + ) { + $this->exception = $exception; + $this->client = $client; + } + + /** + * @return Exception + */ + public function getException() : Exception + { + return $this->exception; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/MessageEvent.php b/src/IPub/MQTTClient/Events/MessageEvent.php new file mode 100644 index 0000000..44722a9 --- /dev/null +++ b/src/IPub/MQTTClient/Events/MessageEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Publish message event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class MessageEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Message + */ + private $message; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Message $message + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Message $message, + Client\IClient $client + ) { + $this->message = $message; + $this->client = $client; + } + + /** + * @return Mqtt\Message + */ + public function getMessage() : Mqtt\Message + { + return $this->message; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/OpenEvent.php b/src/IPub/MQTTClient/Events/OpenEvent.php new file mode 100644 index 0000000..95c8bc3 --- /dev/null +++ b/src/IPub/MQTTClient/Events/OpenEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Open connection event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class OpenEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Connection $connection + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Connection $connection, + Client\IClient $client + ) { + $this->connection = $connection; + $this->client = $client; + } + + /** + * @return Mqtt\Connection + */ + public function getConnection() : Mqtt\Connection + { + return $this->connection; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/PingEvent.php b/src/IPub/MQTTClient/Events/PingEvent.php new file mode 100644 index 0000000..25ba5d1 --- /dev/null +++ b/src/IPub/MQTTClient/Events/PingEvent.php @@ -0,0 +1,57 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use IPub\MQTTClient\Client; + +/** + * PING event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class PingEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Client\IClient $client + */ + public function __construct( + Client\IClient $client + ) { + $this->client = $client; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/PongEvent.php b/src/IPub/MQTTClient/Events/PongEvent.php new file mode 100644 index 0000000..734bc65 --- /dev/null +++ b/src/IPub/MQTTClient/Events/PongEvent.php @@ -0,0 +1,57 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use IPub\MQTTClient\Client; + +/** + * PONG event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class PongEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Connection + */ + private $connection; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Client\IClient $client + */ + public function __construct( + Client\IClient $client + ) { + $this->client = $client; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/PublishEvent.php b/src/IPub/MQTTClient/Events/PublishEvent.php new file mode 100644 index 0000000..51d4056 --- /dev/null +++ b/src/IPub/MQTTClient/Events/PublishEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Publish message event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class PublishEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Message + */ + private $message; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Message $message + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Message $message, + Client\IClient $client + ) { + $this->message = $message; + $this->client = $client; + } + + /** + * @return Mqtt\Message + */ + public function getMessage() : Mqtt\Message + { + return $this->message; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/StartEvent.php b/src/IPub/MQTTClient/Events/StartEvent.php new file mode 100644 index 0000000..68ed337 --- /dev/null +++ b/src/IPub/MQTTClient/Events/StartEvent.php @@ -0,0 +1,30 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +/** + * Server start event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class StartEvent extends EventDispatcher\Event +{ + +} diff --git a/src/IPub/MQTTClient/Events/SubscribeEvent.php b/src/IPub/MQTTClient/Events/SubscribeEvent.php new file mode 100644 index 0000000..485ac49 --- /dev/null +++ b/src/IPub/MQTTClient/Events/SubscribeEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Subscribe to topic event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class SubscribeEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Subscription + */ + private $subscription; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Message $message + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Subscription $subscription, + Client\IClient $client + ) { + $this->subscription = $subscription; + $this->client = $client; + } + + /** + * @return Mqtt\Subscription + */ + public function getSubscription() : Mqtt\Subscription + { + return $this->subscription; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/UnsubscribeEvent.php b/src/IPub/MQTTClient/Events/UnsubscribeEvent.php new file mode 100644 index 0000000..38d5f5f --- /dev/null +++ b/src/IPub/MQTTClient/Events/UnsubscribeEvent.php @@ -0,0 +1,70 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Unsubscribe to topic event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class UnsubscribeEvent extends EventDispatcher\Event +{ + /** + * @var Mqtt\Subscription + */ + private $subscription; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Mqtt\Message $message + * @param Client\IClient $client + */ + public function __construct( + Mqtt\Subscription $subscription, + Client\IClient $client + ) { + $this->subscription = $subscription; + $this->client = $client; + } + + /** + * @return Mqtt\Subscription + */ + public function getSubscription() : Mqtt\Subscription + { + return $this->subscription; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/src/IPub/MQTTClient/Events/WarningEvent.php b/src/IPub/MQTTClient/Events/WarningEvent.php new file mode 100644 index 0000000..82ab18b --- /dev/null +++ b/src/IPub/MQTTClient/Events/WarningEvent.php @@ -0,0 +1,72 @@ + + * @package iPublikuj:MQTTClient! + * @subpackage Events + * @since 1.0.0 + * + * @date 14.11.19 + */ + +namespace IPub\MQTTClient\Events; + +use Exception; + +use Symfony\Contracts\EventDispatcher; + +use BinSoul\Net\Mqtt; + +use IPub\MQTTClient\Client; + +/** + * Communication warning event + * + * @package iPublikuj:MQTTClient! + * @subpackage Events + * + * @author Adam Kadlec + */ +final class WarningEvent extends EventDispatcher\Event +{ + /** + * @var Exception + */ + private $exception; + + /** + * @var Client\IClient + */ + private $client; + + /** + * @param Exception $exception + * @param Client\IClient $client + */ + public function __construct( + Exception $exception, + Client\IClient $client + ) { + $this->exception = $exception; + $this->client = $client; + } + + /** + * @return Exception + */ + public function getException() : Exception + { + return $this->exception; + } + + /** + * @return Client\IClient + */ + public function getClient() : Client\IClient + { + return $this->client; + } +} diff --git a/tests/IPubTests/MQTTClient/ExtensionTest.phpt b/tests/IPubTests/MQTTClient/ExtensionTest.phpt index 79d1c12..e8a1083 100644 --- a/tests/IPubTests/MQTTClient/ExtensionTest.phpt +++ b/tests/IPubTests/MQTTClient/ExtensionTest.phpt @@ -54,7 +54,12 @@ class ExtensionTest extends Tester\TestCase $config = new Nette\Configurator; $config->setTempDirectory(TEMP_DIR); - $config->addConfig(__DIR__ . DS . 'files' . DS . 'config.neon'); + if (getenv('NETTE') === 'default') { + $config->addConfig(__DIR__ . DS . 'files' . DS . 'config.neon'); + + } else { + $config->addConfig(__DIR__ . DS . 'files' . DS . 'config24.neon'); + } return $config->createContainer(); } diff --git a/tests/IPubTests/MQTTClient/files/config.neon b/tests/IPubTests/MQTTClient/files/config.neon index 3baa847..a2b9553 100644 --- a/tests/IPubTests/MQTTClient/files/config.neon +++ b/tests/IPubTests/MQTTClient/files/config.neon @@ -1,2 +1,17 @@ extensions: mqttClient : IPub\MQTTClient\DI\MQTTClientExtension + events : Contributte\EventDispatcher\DI\EventDispatcherExtension + console: Contributte\Console\DI\ConsoleExtension(%consoleMode%) + +mqttClient: + console: true + symfonyEvets: true + +console: + name: iPublikuj:Packages! + version: '1.0' + catchExceptions: true + autoExit: true + url: null + lazy: false + helpers: [] \ No newline at end of file diff --git a/tests/IPubTests/MQTTClient/files/config24.neon b/tests/IPubTests/MQTTClient/files/config24.neon new file mode 100644 index 0000000..3de4790 --- /dev/null +++ b/tests/IPubTests/MQTTClient/files/config24.neon @@ -0,0 +1,18 @@ +extensions: + mqttClient : IPub\MQTTClient\DI\MQTTClientExtension + events : Contributte\EventDispatcher\DI\EventDispatcherExtension + console: Contributte\Console\DI\ConsoleExtension(%consoleMode%) + +mqttClient: + console: true + symfonyEvets: true + +console: + name: iPublikuj:Packages! + version: '1.0' + catchExceptions: true + autoExit: true + url: null + lazy: false + helperSet: null + helpers: [] \ No newline at end of file