Update the package for v1 of the MQTT client (#1)
* Update composer packages and untrack composer.lock * Update code and config for v1.0.0-rc1 * Use contract instead of implementation * Update README.md
This commit is contained in:
parent
2ea0c4cd2c
commit
78af7a1889
|
@ -1,2 +1,3 @@
|
||||||
/.idea/
|
/.idea/
|
||||||
/vendor/
|
/vendor/
|
||||||
|
composer.lock
|
||||||
|
|
70
README.md
70
README.md
|
@ -1,13 +1,17 @@
|
||||||
# php-mqtt/laravel-client
|
# php-mqtt/laravel-client
|
||||||
|
|
||||||
**:warning: Work in progress - use at own risk! :warning:**
|
[![Latest Stable Version](https://poser.pugx.org/php-mqtt/laravel-client/v)](https://packagist.org/packages/php-mqtt/laravel-client)
|
||||||
|
[![Total Downloads](https://poser.pugx.org/php-mqtt/laravel-client/downloads)](https://packagist.org/packages/php-mqtt/laravel-client)
|
||||||
|
[![License](https://poser.pugx.org/php-mqtt/laravel-client/license)](https://packagist.org/packages/php-mqtt/laravel-client)
|
||||||
|
|
||||||
`php-mqtt/laravel-client` was created by, and is maintained by [Namoshek](https://github.com/namoshek).
|
`php-mqtt/laravel-client` was created by, and is maintained by [Marvin Mall](https://github.com/namoshek).
|
||||||
It is a Laravel wrapper for the [`php-mqtt/client`](https://github.com/php-mqtt/client) package and
|
It is a Laravel wrapper for the [`php-mqtt/client`](https://github.com/php-mqtt/client) package and
|
||||||
allows you to connect to an MQTT broker where you can publish messages and subscribe to topics.
|
allows you to connect to an MQTT broker where you can publish messages and subscribe to topics.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
The package is available on [packagist.org](https://packagist.org/packages/php-mqtt/laravel-client) and can be installed using composer:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
composer require php-mqtt/laravel-client
|
composer require php-mqtt/laravel-client
|
||||||
```
|
```
|
||||||
|
@ -18,20 +22,17 @@ Registered will be the service provider as well as an `MQTT` facade.
|
||||||
After installing the package, you should publish the configuration file using
|
After installing the package, you should publish the configuration file using
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
php artisan vendor:publish --provider="PhpMqtt\Client\MqttClientServiceProvider"
|
php artisan vendor:publish --provider="PhpMqtt\Client\MqttClientServiceProvider" --tag="config"
|
||||||
```
|
```
|
||||||
|
|
||||||
and change the configuration in `config/mqtt-client.php` according to your needs.
|
and change the configuration in `config/mqtt-client.php` according to your needs.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
The package allows you to configure multiple named connections. An initial example
|
The package allows you to configure multiple named connections. An initial example with inline documentation can be found in the published configuration file.
|
||||||
can be found in the published configuration file. Except for the `host` parameter,
|
Most of the configuration options are optional and come with sane defaults (especially all of the `connection_settings`).
|
||||||
all configuration options are entirely optional and come with the defaults provided
|
|
||||||
to the `env()` helper in the example configuration file (no default means `null`).
|
|
||||||
|
|
||||||
An example configuration of two connections, where one is meant for sharing public
|
An example configuration of two connections, where one is meant for sharing public data and one for private data, could look like the following:
|
||||||
data and one for private data, could look like the following:
|
|
||||||
```php
|
```php
|
||||||
'default_connection' => 'private',
|
'default_connection' => 'private',
|
||||||
|
|
||||||
|
@ -48,6 +49,8 @@ data and one for private data, could look like the following:
|
||||||
```
|
```
|
||||||
In this example, the private connection is the default one.
|
In this example, the private connection is the default one.
|
||||||
|
|
||||||
|
_Note: it is recommended to use environment variables to configure the MQTT client. Available environment variables can be found in the configuration file._
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Publish (QoS level 0)
|
### Publish (QoS level 0)
|
||||||
|
@ -59,41 +62,51 @@ use PhpMqtt\Client\Facades\MQTT;
|
||||||
MQTT::publish('some/topic', 'Hello World!');
|
MQTT::publish('some/topic', 'Hello World!');
|
||||||
```
|
```
|
||||||
|
|
||||||
If needed, the connection name can be passed as third parameter:
|
If needed, the _retain_ flag (default: `false`) can be passed as third and the connection name as fourth parameter:
|
||||||
```php
|
```php
|
||||||
use PhpMqtt\Client\Facades\MQTT;
|
use PhpMqtt\Client\Facades\MQTT;
|
||||||
|
|
||||||
MQTT::publish('some/topic', 'Hello World!', 'public');
|
MQTT::publish('some/topic', 'Hello World!', true, 'public');
|
||||||
```
|
```
|
||||||
|
|
||||||
Using `MQTT::publish($topic, $message)` will implicitly call `MQTT::connection()`,
|
Using `MQTT::publish($topic, $message)` will implicitly call `MQTT::connection()`, but the connection will not be closed after usage.
|
||||||
but the connection will not be closed after usage. If you want to close the connection
|
If you want to close the connection manually because your script does not need the connection anymore,
|
||||||
manually because your script does not need the connection any more, you can call
|
you can call `MQTT:disconnect()` (optionally with the connection name as a parameter).
|
||||||
`MQTT:close()` (optionally with the connection name as a parameter).
|
|
||||||
Please also note that using `MQTT::publish($topic, $message)` will always use QoS level 0.
|
Please also note that using `MQTT::publish($topic, $message)` will always use QoS level 0.
|
||||||
If you need a different QoS level, then please follow the instructions below.
|
If you need a different QoS level, you will need to use the `MqttClient` directly which is explained below.
|
||||||
|
|
||||||
### Publish (QoS level 1 & 2)
|
### Publish (QoS level 1 & 2)
|
||||||
|
|
||||||
Different to QoS level 0, we need to run an event loop in order for QoS 1 and 2 to work.
|
Different to QoS level 0, we need to run an event loop in order for QoS 1 and 2 to work.
|
||||||
This is because with a one-off command we cannot guarantee that a message reaches it's target.
|
This is because with a one-off command we cannot guarantee that a message reaches its target.
|
||||||
The event loop will ensure a published message gets sent again if no acknowledgment is returned
|
The event loop will ensure a published message gets sent again if no acknowledgment is returned by the broker within a grace period.
|
||||||
by the broker within a grace period (in case of QoS level 1). Also handled by the event loop will
|
Only when the broker returns an acknowledgement (or all of the acknowledgements in case of QoS 2),
|
||||||
be the release of packages in case of QoS level 2.
|
the client will stop resending the message.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
use PhpMqtt\Client\Facades\MQTT;
|
use PhpMqtt\Client\Facades\MQTT;
|
||||||
|
|
||||||
|
/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
|
||||||
$mqtt = MQTT::connection();
|
$mqtt = MQTT::connection();
|
||||||
$mqtt->publish('some/topic', 'foo', 1);
|
$mqtt->publish('some/topic', 'foo', 1);
|
||||||
$mqtt->publish('some/other/topic', 'bar', 2);
|
$mqtt->publish('some/other/topic', 'bar', 2, true); // Retain the message
|
||||||
$mqtt->loop(true);
|
$mqtt->loop(true);
|
||||||
```
|
```
|
||||||
|
|
||||||
In order to escape the loop, you can call `$mqtt->interrupt()` which will exit the loop during
|
`$mqtt->loop()` actually starts an infinite loop. To escape it, there are multiple options.
|
||||||
the next iteration. The method can for example be called in a registered signal handler:
|
In case of simply publishing a message, all we want is to receive an acknowledgement.
|
||||||
|
Therefore, we can simply pass `true` as second parameter to exit the loop as soon as all resend queues are cleared:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
pcntl_signal(SIGINT, function (int $signal, $info) use ($mqtt) {
|
/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
|
||||||
|
$mqtt->loop(true, true);
|
||||||
|
```
|
||||||
|
|
||||||
|
In order to escape the loop, you can also call `$mqtt->interrupt()` which will exit the loop during
|
||||||
|
the next iteration. The method can, for example, be called in a registered signal handler:
|
||||||
|
```php
|
||||||
|
/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
|
||||||
|
pcntl_signal(SIGINT, function () use ($mqtt) {
|
||||||
$mqtt->interrupt();
|
$mqtt->interrupt();
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -101,11 +114,12 @@ pcntl_signal(SIGINT, function (int $signal, $info) use ($mqtt) {
|
||||||
### Subscribe
|
### Subscribe
|
||||||
|
|
||||||
Very similar to publishing with QoS level 1 and 2, subscribing requires to run an event loop.
|
Very similar to publishing with QoS level 1 and 2, subscribing requires to run an event loop.
|
||||||
But before running the loop, topics need to be subscribed to:
|
Although before running the loop, topics need to be subscribed to:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
use PhpMqtt\Client\Facades\MQTT;
|
use PhpMqtt\Client\Facades\MQTT;
|
||||||
|
|
||||||
|
/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
|
||||||
$mqtt = MQTT::connection();
|
$mqtt = MQTT::connection();
|
||||||
$mqtt->subscribe('some/topic', function (string $topic, string $message) {
|
$mqtt->subscribe('some/topic', function (string $topic, string $message) {
|
||||||
echo sprintf('Received QoS level 1 message on topic [%s]: %s', $topic, $message);
|
echo sprintf('Received QoS level 1 message on topic [%s]: %s', $topic, $message);
|
||||||
|
@ -116,7 +130,11 @@ $mqtt->loop(true);
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
This library allows you to use all the features provided by [`php-mqtt/client`](https://github.com/php-mqtt/client).
|
This library allows you to use all the features provided by [`php-mqtt/client`](https://github.com/php-mqtt/client).
|
||||||
|
Simply retrieve an instance of `\PhpMqtt\Client\Contracts\MqttClient` with `MQTT::connection(string $name = null)` and use it directly.
|
||||||
|
|
||||||
|
For an extensive collection of examples which explain how to use the MQTT client (directly),
|
||||||
|
you can visit the [`php-mqtt/client-examples` repository](https://github.com/php-mqtt/client-examples).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
`php-mqtt/laravel-client` is open-sourced software licensed under the [MIT license](LICENSE.md).
|
`php-mqtt/laravel-client` is open-source software licensed under the [MIT license](LICENSE.md).
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "php-mqtt/laravel-client",
|
"name": "php-mqtt/laravel-client",
|
||||||
"description": "An MQTT client library for Laravel.",
|
"description": "A wrapper for the php-mqtt/client library for Laravel.",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"mqtt",
|
"mqtt",
|
||||||
|
@ -13,16 +13,16 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Namoshek",
|
"name": "Marvin Mall",
|
||||||
"email": "namoshek@gmx.at",
|
"email": "marvin-mall@msn.com",
|
||||||
"role": "developer"
|
"role": "developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2",
|
"php": "^7.4|^8.0",
|
||||||
"illuminate/config": "~5.8|~6.0",
|
"illuminate/config": "~7.0|~8.0",
|
||||||
"illuminate/support": "~5.8|~6.0",
|
"illuminate/support": "~7.0|~8.0",
|
||||||
"php-mqtt/client": "0.1.*"
|
"php-mqtt/client": "v1.0.0-rc1"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|
|
@ -1,686 +0,0 @@
|
||||||
{
|
|
||||||
"_readme": [
|
|
||||||
"This file locks the dependencies of your project to a known state",
|
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
|
||||||
"This file is @generated automatically"
|
|
||||||
],
|
|
||||||
"content-hash": "ddb796fbba02d54a14b0299e7af01b14",
|
|
||||||
"packages": [
|
|
||||||
{
|
|
||||||
"name": "doctrine/inflector",
|
|
||||||
"version": "v1.3.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/doctrine/inflector.git",
|
|
||||||
"reference": "5527a48b7313d15261292c149e55e26eae771b0a"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
|
|
||||||
"reference": "5527a48b7313d15261292c149e55e26eae771b0a",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "^6.2"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.3.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Roman Borschel",
|
|
||||||
"email": "roman@code-factory.org"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Benjamin Eberlei",
|
|
||||||
"email": "kontakt@beberlei.de"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Guilherme Blanco",
|
|
||||||
"email": "guilhermeblanco@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jonathan Wage",
|
|
||||||
"email": "jonwage@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Johannes Schmitt",
|
|
||||||
"email": "schmittjoh@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Common String Manipulations with regard to casing and singular/plural rules.",
|
|
||||||
"homepage": "http://www.doctrine-project.org",
|
|
||||||
"keywords": [
|
|
||||||
"inflection",
|
|
||||||
"pluralize",
|
|
||||||
"singularize",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"time": "2018-01-09T20:05:19+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "illuminate/config",
|
|
||||||
"version": "v6.0.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/illuminate/config.git",
|
|
||||||
"reference": "ac59ced5c18df9664dcfe4e33d9040c40386d7da"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/illuminate/config/zipball/ac59ced5c18df9664dcfe4e33d9040c40386d7da",
|
|
||||||
"reference": "ac59ced5c18df9664dcfe4e33d9040c40386d7da",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"illuminate/contracts": "^6.0",
|
|
||||||
"illuminate/support": "^6.0",
|
|
||||||
"php": "^7.2"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "6.0-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Illuminate\\Config\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Otwell",
|
|
||||||
"email": "taylor@laravel.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "The Illuminate Config package.",
|
|
||||||
"homepage": "https://laravel.com",
|
|
||||||
"time": "2019-07-25T05:06:48+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "illuminate/contracts",
|
|
||||||
"version": "v6.0.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/illuminate/contracts.git",
|
|
||||||
"reference": "e5d7a6daa4beab3ec7c2d24679e213883a5fc09d"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/e5d7a6daa4beab3ec7c2d24679e213883a5fc09d",
|
|
||||||
"reference": "e5d7a6daa4beab3ec7c2d24679e213883a5fc09d",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.2",
|
|
||||||
"psr/container": "^1.0",
|
|
||||||
"psr/simple-cache": "^1.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "6.0-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Illuminate\\Contracts\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Otwell",
|
|
||||||
"email": "taylor@laravel.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "The Illuminate Contracts package.",
|
|
||||||
"homepage": "https://laravel.com",
|
|
||||||
"time": "2019-08-24T15:24:36+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "illuminate/support",
|
|
||||||
"version": "v6.0.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/illuminate/support.git",
|
|
||||||
"reference": "64669342920e11fb91bd1af838e3d69dac525eae"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/illuminate/support/zipball/64669342920e11fb91bd1af838e3d69dac525eae",
|
|
||||||
"reference": "64669342920e11fb91bd1af838e3d69dac525eae",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"doctrine/inflector": "^1.1",
|
|
||||||
"ext-json": "*",
|
|
||||||
"ext-mbstring": "*",
|
|
||||||
"illuminate/contracts": "^6.0",
|
|
||||||
"nesbot/carbon": "^2.0",
|
|
||||||
"php": "^7.2"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"tightenco/collect": "<5.5.33"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"illuminate/filesystem": "Required to use the composer class (^6.0).",
|
|
||||||
"moontoast/math": "Required to use ordered UUIDs (^1.1).",
|
|
||||||
"ramsey/uuid": "Required to use Str::uuid() (^3.7).",
|
|
||||||
"symfony/process": "Required to use the composer class (^4.3.4).",
|
|
||||||
"symfony/var-dumper": "Required to use the dd function (^4.3.4).",
|
|
||||||
"vlucas/phpdotenv": "Required to use the Env class and env helper (^3.3)."
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "6.0-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Illuminate\\Support\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"helpers.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Otwell",
|
|
||||||
"email": "taylor@laravel.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "The Illuminate Support package.",
|
|
||||||
"homepage": "https://laravel.com",
|
|
||||||
"time": "2019-09-03T17:25:40+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "nesbot/carbon",
|
|
||||||
"version": "2.24.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
|
||||||
"reference": "934459c5ac0658bc765ad1e53512c7c77adcac29"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/934459c5ac0658bc765ad1e53512c7c77adcac29",
|
|
||||||
"reference": "934459c5ac0658bc765ad1e53512c7c77adcac29",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-json": "*",
|
|
||||||
"php": "^7.1.8 || ^8.0",
|
|
||||||
"symfony/translation": "^3.4 || ^4.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
|
|
||||||
"kylekatarnls/multi-tester": "^1.1",
|
|
||||||
"phpmd/phpmd": "dev-php-7.1-compatibility",
|
|
||||||
"phpstan/phpstan": "^0.11",
|
|
||||||
"phpunit/phpunit": "^7.5 || ^8.0",
|
|
||||||
"squizlabs/php_codesniffer": "^3.4"
|
|
||||||
},
|
|
||||||
"bin": [
|
|
||||||
"bin/carbon"
|
|
||||||
],
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"providers": [
|
|
||||||
"Carbon\\Laravel\\ServiceProvider"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Carbon\\": "src/Carbon/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Brian Nesbitt",
|
|
||||||
"email": "brian@nesbot.com",
|
|
||||||
"homepage": "http://nesbot.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "kylekatarnls",
|
|
||||||
"homepage": "http://github.com/kylekatarnls"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "A API extension for DateTime that supports 281 different languages.",
|
|
||||||
"homepage": "http://carbon.nesbot.com",
|
|
||||||
"keywords": [
|
|
||||||
"date",
|
|
||||||
"datetime",
|
|
||||||
"time"
|
|
||||||
],
|
|
||||||
"time": "2019-08-31T16:37:55+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "php-mqtt/client",
|
|
||||||
"version": "v0.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/php-mqtt/client.git",
|
|
||||||
"reference": "cfa1a0601a434f031c95df50da13dc3956d1fb96"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/php-mqtt/client/zipball/cfa1a0601a434f031c95df50da13dc3956d1fb96",
|
|
||||||
"reference": "cfa1a0601a434f031c95df50da13dc3956d1fb96",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.2",
|
|
||||||
"psr/log": "^1.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "^8.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"PhpMqtt\\Client\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Namoshek",
|
|
||||||
"email": "namoshek@gmx.at",
|
|
||||||
"role": "developer"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "An MQTT client written in and for PHP.",
|
|
||||||
"keywords": [
|
|
||||||
"client",
|
|
||||||
"mqtt",
|
|
||||||
"publish",
|
|
||||||
"subscribe"
|
|
||||||
],
|
|
||||||
"time": "2019-09-15T12:21:13+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "psr/container",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/php-fig/container.git",
|
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.0.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Psr\\Container\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "PHP-FIG",
|
|
||||||
"homepage": "http://www.php-fig.org/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Common Container Interface (PHP FIG PSR-11)",
|
|
||||||
"homepage": "https://github.com/php-fig/container",
|
|
||||||
"keywords": [
|
|
||||||
"PSR-11",
|
|
||||||
"container",
|
|
||||||
"container-interface",
|
|
||||||
"container-interop",
|
|
||||||
"psr"
|
|
||||||
],
|
|
||||||
"time": "2017-02-14T16:28:37+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "psr/log",
|
|
||||||
"version": "1.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/php-fig/log.git",
|
|
||||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
|
||||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.0.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Psr\\Log\\": "Psr/Log/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "PHP-FIG",
|
|
||||||
"homepage": "http://www.php-fig.org/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Common interface for logging libraries",
|
|
||||||
"homepage": "https://github.com/php-fig/log",
|
|
||||||
"keywords": [
|
|
||||||
"log",
|
|
||||||
"psr",
|
|
||||||
"psr-3"
|
|
||||||
],
|
|
||||||
"time": "2018-11-20T15:27:04+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "psr/simple-cache",
|
|
||||||
"version": "1.0.1",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/php-fig/simple-cache.git",
|
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.0.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Psr\\SimpleCache\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "PHP-FIG",
|
|
||||||
"homepage": "http://www.php-fig.org/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Common interfaces for simple caching",
|
|
||||||
"keywords": [
|
|
||||||
"cache",
|
|
||||||
"caching",
|
|
||||||
"psr",
|
|
||||||
"psr-16",
|
|
||||||
"simple-cache"
|
|
||||||
],
|
|
||||||
"time": "2017-10-23T01:57:42+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-mbstring",
|
|
||||||
"version": "v1.12.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
|
||||||
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
|
|
||||||
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.3"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-mbstring": "For best performance"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.12-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill for the Mbstring extension",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"mbstring",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"time": "2019-08-06T08:03:45+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/translation",
|
|
||||||
"version": "v4.3.4",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/translation.git",
|
|
||||||
"reference": "28498169dd334095fa981827992f3a24d50fed0f"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/translation/zipball/28498169dd334095fa981827992f3a24d50fed0f",
|
|
||||||
"reference": "28498169dd334095fa981827992f3a24d50fed0f",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.1.3",
|
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
|
||||||
"symfony/translation-contracts": "^1.1.6"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"symfony/config": "<3.4",
|
|
||||||
"symfony/dependency-injection": "<3.4",
|
|
||||||
"symfony/yaml": "<3.4"
|
|
||||||
},
|
|
||||||
"provide": {
|
|
||||||
"symfony/translation-implementation": "1.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"psr/log": "~1.0",
|
|
||||||
"symfony/config": "~3.4|~4.0",
|
|
||||||
"symfony/console": "~3.4|~4.0",
|
|
||||||
"symfony/dependency-injection": "~3.4|~4.0",
|
|
||||||
"symfony/finder": "~2.8|~3.0|~4.0",
|
|
||||||
"symfony/http-kernel": "~3.4|~4.0",
|
|
||||||
"symfony/intl": "~3.4|~4.0",
|
|
||||||
"symfony/service-contracts": "^1.1.2",
|
|
||||||
"symfony/var-dumper": "~3.4|~4.0",
|
|
||||||
"symfony/yaml": "~3.4|~4.0"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"psr/log-implementation": "To use logging capability in translator",
|
|
||||||
"symfony/config": "",
|
|
||||||
"symfony/yaml": ""
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "4.3-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Component\\Translation\\": ""
|
|
||||||
},
|
|
||||||
"exclude-from-classmap": [
|
|
||||||
"/Tests/"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Fabien Potencier",
|
|
||||||
"email": "fabien@symfony.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony Translation Component",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"time": "2019-08-26T08:55:16+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/translation-contracts",
|
|
||||||
"version": "v1.1.6",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/translation-contracts.git",
|
|
||||||
"reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a",
|
|
||||||
"reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.1.3"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"symfony/translation-implementation": ""
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.1-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Contracts\\Translation\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Generic abstractions related to translation",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"abstractions",
|
|
||||||
"contracts",
|
|
||||||
"decoupling",
|
|
||||||
"interfaces",
|
|
||||||
"interoperability",
|
|
||||||
"standards"
|
|
||||||
],
|
|
||||||
"time": "2019-08-02T12:15:04+00:00"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"packages-dev": [],
|
|
||||||
"aliases": [],
|
|
||||||
"minimum-stability": "stable",
|
|
||||||
"stability-flags": [],
|
|
||||||
"prefer-stable": false,
|
|
||||||
"prefer-lowest": false,
|
|
||||||
"platform": {
|
|
||||||
"php": "^7.2"
|
|
||||||
},
|
|
||||||
"platform-dev": []
|
|
||||||
}
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use PhpMqtt\Client\MqttClient;
|
||||||
use PhpMqtt\Client\Repositories\MemoryRepository;
|
use PhpMqtt\Client\Repositories\MemoryRepository;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -30,27 +31,80 @@ return [
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'connections' => [
|
'connections' => [
|
||||||
|
|
||||||
'default' => [
|
'default' => [
|
||||||
|
|
||||||
|
// The host and port to which the client shall connect.
|
||||||
'host' => env('MQTT_HOST'),
|
'host' => env('MQTT_HOST'),
|
||||||
'port' => env('MQTT_PORT', 1883),
|
'port' => env('MQTT_PORT', 1883),
|
||||||
'username' => env('MQTT_USERNAME'),
|
|
||||||
'password' => env('MQTT_PASSWORD'),
|
// The MQTT protocol version used for the connection.
|
||||||
|
'protocol' => MqttClient::MQTT_3_1,
|
||||||
|
|
||||||
|
// A specific client id to be used for the connection. If omitted,
|
||||||
|
// a random client id will be generated for each new connection.
|
||||||
'client_id' => env('MQTT_CLIENT_ID'),
|
'client_id' => env('MQTT_CLIENT_ID'),
|
||||||
'cafile' => env('MQTT_CAFILE'),
|
|
||||||
'clean_session' => env('MQTT_CLEAN_SESSION', true),
|
// Whether a clean session shall be used and requested by the client.
|
||||||
'logging_enabled' => env('MQTT_LOGGING', true),
|
// A clean session will let the broker forget about subscriptions and
|
||||||
|
// queued messages when the client disconnects. Also, if available,
|
||||||
|
// data of a previous session will be deleted when connecting.
|
||||||
|
'use_clean_session' => env('MQTT_CLEAN_SESSION', true),
|
||||||
|
|
||||||
|
// Whether logging shall be enabled. The default logger will be used
|
||||||
|
// with the log level as configured.
|
||||||
|
'enable_logging' => env('MQTT_ENABLE_LOGGING', true),
|
||||||
|
|
||||||
|
// Defines which repository implementation shall be used. Currently,
|
||||||
|
// only a MemoryRepository is supported.
|
||||||
'repository' => MemoryRepository::class,
|
'repository' => MemoryRepository::class,
|
||||||
'settings' => [
|
|
||||||
'quality_of_service' => env('MQTT_QUALITY_OF_SERVICE', 0),
|
// Additional settings used for the connection to the broker.
|
||||||
'block_socket' => env('MQTT_BLOCK_SOCKET', false),
|
// All of these settings are entirely optional and have sane defaults.
|
||||||
'keep_alive' => env('MQTT_KEEP_ALIVE', 10),
|
'connection_settings' => [
|
||||||
'socket_timeout' => env('MQTT_TIMEOUT', 5),
|
|
||||||
|
// The TLS settings used for the connection. Must match the specified port.
|
||||||
|
'tls' => [
|
||||||
|
'enabled' => env('MQTT_TLS_ENABLED', false),
|
||||||
|
'allow_self_signed_certificate' => env('MQTT_TLS_ALLOW_SELF_SIGNED_CERT', false),
|
||||||
|
'verify_peer' => env('MQTT_TLS_VERIFY_PEER', true),
|
||||||
|
'verify_peer_name' => env('MQTT_TLS_VERIFY_PEER_NAME', true),
|
||||||
|
'ca_file' => env('MQTT_TLS_CA_FILE'),
|
||||||
|
'ca_path' => env('MQTT_TLS_CA_PATH'),
|
||||||
|
'client_certificate_file' => env('MQTT_TLS_CLIENT_CERT_FILE'),
|
||||||
|
'client_certificate_key_file' => env('MQTT_TLS_CLIENT_CERT_KEY_FILE'),
|
||||||
|
'client_certificate_key_passphrase' => env('MQTT_TLS_CLIENT_CERT_KEY_PASSPHRASE'),
|
||||||
|
],
|
||||||
|
|
||||||
|
// Credentials used for authentication and authorization.
|
||||||
|
'auth' => [
|
||||||
|
'username' => env('MQTT_AUTH_USERNAME'),
|
||||||
|
'password' => env('MQTT_AUTH_PASSWORD'),
|
||||||
|
],
|
||||||
|
|
||||||
|
// Can be used to declare a last will during connection. The last will
|
||||||
|
// is published by the broker when the client disconnects abnormally
|
||||||
|
// (e.g. in case of a disconnect).
|
||||||
|
'last_will' => [
|
||||||
|
'topic' => env('MQTT_LAST_WILL_TOPIC'),
|
||||||
|
'message' => env('MQTT_LAST_WILL_MESSAGE'),
|
||||||
|
'quality_of_service' => env('MQTT_LAST_WILL_QUALITY_OF_SERVICE', 0),
|
||||||
|
'retain' => env('MQTT_LAST_WILL_RETAIN', false),
|
||||||
|
],
|
||||||
|
|
||||||
|
// The timeouts (in seconds) used for the connection. Some of these settings
|
||||||
|
// are only relevant when using the event loop of the MQTT client.
|
||||||
|
'connect_timeout' => env('MQTT_CONNECT_TIMEOUT', 60),
|
||||||
|
'socket_timeout' => env('MQTT_SOCKET_TIMEOUT', 5),
|
||||||
'resend_timeout' => env('MQTT_RESEND_TIMEOUT', 10),
|
'resend_timeout' => env('MQTT_RESEND_TIMEOUT', 10),
|
||||||
'retain' => env('MQTT_RETAIN', false),
|
|
||||||
'last_will_topic' => env('MQTT_WILL_TOPIC'),
|
// The interval (in seconds) in which the client will send a ping to the broker,
|
||||||
'last_will_message' => env('MQTT_WILL_MESSAGE'),
|
// if no other message has been sent.
|
||||||
|
'keep_alive_interval' => env('MQTT_KEEP_ALIVE_INTERVAL', 10),
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
@ -6,10 +6,15 @@ namespace PhpMqtt\Client;
|
||||||
|
|
||||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||||
use Illuminate\Contracts\Foundation\Application;
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use PhpMqtt\Client\Contracts\MqttClient as MqttClientContract;
|
||||||
use PhpMqtt\Client\Contracts\Repository;
|
use PhpMqtt\Client\Contracts\Repository;
|
||||||
|
use PhpMqtt\Client\Exceptions\ConfigurationInvalidException;
|
||||||
use PhpMqtt\Client\Exceptions\ConnectingToBrokerFailedException;
|
use PhpMqtt\Client\Exceptions\ConnectingToBrokerFailedException;
|
||||||
use PhpMqtt\Client\Exceptions\ConnectionNotAvailableException;
|
use PhpMqtt\Client\Exceptions\ConnectionNotAvailableException;
|
||||||
use PhpMqtt\Client\Exceptions\DataTransferException;
|
use PhpMqtt\Client\Exceptions\DataTransferException;
|
||||||
|
use PhpMqtt\Client\Exceptions\ProtocolNotSupportedException;
|
||||||
|
use PhpMqtt\Client\Exceptions\RepositoryException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages the MQTT connections of the application.
|
* Manages the MQTT connections of the application.
|
||||||
|
@ -18,17 +23,12 @@ use PhpMqtt\Client\Exceptions\DataTransferException;
|
||||||
*/
|
*/
|
||||||
class ConnectionManager
|
class ConnectionManager
|
||||||
{
|
{
|
||||||
/** @var Application */
|
private Application $application;
|
||||||
protected $application;
|
private array $config;
|
||||||
|
private string $defaultConnection;
|
||||||
|
|
||||||
/** @var array */
|
/** @var MqttClientContract[] */
|
||||||
protected $config;
|
private array $connections = [];
|
||||||
|
|
||||||
/** @var string */
|
|
||||||
protected $defaultConnection;
|
|
||||||
|
|
||||||
/** @var MQTTClient[] */
|
|
||||||
protected $connections = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ConnectionManager constructor.
|
* ConnectionManager constructor.
|
||||||
|
@ -40,19 +40,21 @@ class ConnectionManager
|
||||||
{
|
{
|
||||||
$this->application = $application;
|
$this->application = $application;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->defaultConnection = array_get($config, 'default_connection', 'default');
|
$this->defaultConnection = Arr::get($config, 'default_connection', 'default');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the connection with the specified name.
|
* Gets the connection with the specified name.
|
||||||
*
|
*
|
||||||
* @param string|null $name
|
* @param string|null $name
|
||||||
* @return MQTTClient
|
* @return MqttClientContract
|
||||||
* @throws BindingResolutionException
|
* @throws BindingResolutionException
|
||||||
|
* @throws ConfigurationInvalidException
|
||||||
* @throws ConnectingToBrokerFailedException
|
* @throws ConnectingToBrokerFailedException
|
||||||
* @throws ConnectionNotAvailableException
|
* @throws ConnectionNotAvailableException
|
||||||
|
* @throws ProtocolNotSupportedException
|
||||||
*/
|
*/
|
||||||
public function connection(string $name = null): MQTTClient
|
public function connection(string $name = null): MqttClientContract
|
||||||
{
|
{
|
||||||
if ($name === null) {
|
if ($name === null) {
|
||||||
$name = $this->defaultConnection;
|
$name = $this->defaultConnection;
|
||||||
|
@ -71,90 +73,104 @@ class ConnectionManager
|
||||||
* @param string|null $connection
|
* @param string|null $connection
|
||||||
* @throws DataTransferException
|
* @throws DataTransferException
|
||||||
*/
|
*/
|
||||||
public function close(string $connection = null): void
|
public function disconnect(string $connection = null): void
|
||||||
{
|
{
|
||||||
if ($connection === null) {
|
if ($connection === null) {
|
||||||
$connection = $this->defaultConnection;
|
$connection = $this->defaultConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists($connection, $this->connections)) {
|
if (array_key_exists($connection, $this->connections)) {
|
||||||
$this->connections[$connection]->close();
|
$this->connections[$connection]->disconnect();
|
||||||
unset($this->connections[$connection]);
|
unset($this->connections[$connection]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publishes a message on the given connection. The QoS level will be 0
|
* Publishes a message on the given connection. The QoS level will be 0.
|
||||||
* and the message will not be retained by the broker.
|
|
||||||
*
|
*
|
||||||
* @param string $topic
|
* @param string $topic
|
||||||
* @param string $message
|
* @param string $message
|
||||||
|
* @param bool $retain
|
||||||
* @param string|null $connection
|
* @param string|null $connection
|
||||||
* @throws BindingResolutionException
|
* @throws BindingResolutionException
|
||||||
|
* @throws ConfigurationInvalidException
|
||||||
* @throws ConnectingToBrokerFailedException
|
* @throws ConnectingToBrokerFailedException
|
||||||
* @throws ConnectionNotAvailableException
|
* @throws ConnectionNotAvailableException
|
||||||
* @throws DataTransferException
|
* @throws DataTransferException
|
||||||
|
* @throws ProtocolNotSupportedException
|
||||||
|
* @throws RepositoryException
|
||||||
*/
|
*/
|
||||||
public function publish(string $topic, string $message, string $connection = null): void
|
public function publish(string $topic, string $message, bool $retain = false, string $connection = null): void
|
||||||
{
|
{
|
||||||
$client = $this->connection($connection);
|
$client = $this->connection($connection);
|
||||||
|
|
||||||
$client->publish($topic, $message);
|
$client->publish($topic, $message, MqttClient::QOS_AT_MOST_ONCE, $retain);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new MQTT client and connects to the specified server.
|
* Creates a new MQTT client and connects to the specified server.
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return MQTTClient
|
* @return MqttClientContract
|
||||||
* @throws BindingResolutionException
|
* @throws BindingResolutionException
|
||||||
|
* @throws ConfigurationInvalidException
|
||||||
* @throws ConnectingToBrokerFailedException
|
* @throws ConnectingToBrokerFailedException
|
||||||
* @throws ConnectionNotAvailableException
|
* @throws ConnectionNotAvailableException
|
||||||
|
* @throws ProtocolNotSupportedException
|
||||||
*/
|
*/
|
||||||
protected function createConnection(string $name): MQTTClient
|
protected function createConnection(string $name): MqttClientContract
|
||||||
{
|
{
|
||||||
$config = array_get($this->config, "connections.{$name}");
|
$config = Arr::get($this->config, "connections.{$name}");
|
||||||
|
|
||||||
if ($config === null) {
|
if ($config === null) {
|
||||||
throw new ConnectionNotAvailableException($name);
|
throw new ConnectionNotAvailableException($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
$host = array_get($config, 'host');
|
$host = Arr::get($config, 'host');
|
||||||
$port = array_get($config, 'port', 1883);
|
$port = Arr::get($config, 'port', 1883);
|
||||||
$username = array_get($config, 'username');
|
$clientId = Arr::get($config, 'client_id');
|
||||||
$password = array_get($config, 'password');
|
$protocol = Arr::get($config, 'protocol', MqttClient::MQTT_3_1);
|
||||||
$clientId = array_get($config, 'client_id');
|
$cleanSession = Arr::get($config, 'use_clean_session', true);
|
||||||
$caFile = array_get($config, 'cafile');
|
$repository = Arr::get($config, 'repository', Repository::class);
|
||||||
$cleanSession = array_get($config, 'clean_session', true);
|
$loggingEnabled = Arr::get($config, 'enable_logging', true);
|
||||||
$loggingEnabled = array_get($config, 'logging_enabled', true);
|
|
||||||
$repository = array_get($config, 'repository', Repository::class);
|
|
||||||
|
|
||||||
$settings = $this->parseConnectionSettings(array_get($config, 'settings', []));
|
$settings = $this->buildConnectionSettings(Arr::get($config, 'connection_settings', []));
|
||||||
$repository = $this->application->make($repository);
|
$repository = $this->application->make($repository);
|
||||||
$logger = $loggingEnabled ? $this->application->make('log') : null;
|
$logger = $loggingEnabled ? $this->application->make('log') : null;
|
||||||
|
|
||||||
$client = new MQTTClient($host, $port, $clientId, $caFile, $repository, $logger);
|
$client = new MqttClient($host, $port, $clientId, $protocol, $repository, $logger);
|
||||||
$client->connect($username, $password, $settings, $cleanSession);
|
$client->connect($settings, $cleanSession);
|
||||||
|
|
||||||
return $client;
|
return $client;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the given settings and returns a populated settings object.
|
* Builds the {@see ConnectionSettings} for the connection specified by the given config.
|
||||||
*
|
*
|
||||||
* @param array $settings
|
* @param array $config
|
||||||
* @return ConnectionSettings
|
* @return ConnectionSettings
|
||||||
*/
|
*/
|
||||||
protected function parseConnectionSettings(array $settings): ConnectionSettings
|
protected function buildConnectionSettings(array $config): ConnectionSettings
|
||||||
{
|
{
|
||||||
$qos = array_get($settings, 'quality_of_service', 0);
|
return (new ConnectionSettings)
|
||||||
$blockSocket = array_get($settings, 'block_socket', false);
|
->setConnectTimeout(Arr::get($config, 'connect_timeout', 60))
|
||||||
$keepAlive = array_get($settings, 'keep_alive', 10);
|
->setSocketTimeout(Arr::get($config, 'socket_timeout', 5))
|
||||||
$socketTimeout = array_get($settings, 'socket_timeout', 5);
|
->setResendTimeout(Arr::get($config, 'resend_timeout', 10))
|
||||||
$resendTimeout = array_get($settings, 'resend_timeout', 10);
|
->setKeepAliveInterval(Arr::get($config, 'keep_alive_interval', 10))
|
||||||
$retain = array_get($settings, 'retain', false);
|
->setUsername(Arr::get($config, 'auth.username'))
|
||||||
$lastWillTopic = array_get($settings, 'last_will_topic');
|
->setPassword(Arr::get($config, 'auth.password'))
|
||||||
$lastWillMessage = array_get($settings, 'last_will_message');
|
->setUseTls(Arr::get($config, 'tls.enabled', false))
|
||||||
|
->setTlsSelfSignedAllowed(Arr::get($config, 'tls.allow_self_signed_certificate', false))
|
||||||
return new ConnectionSettings($qos, $retain, $blockSocket, $socketTimeout, $keepAlive, $resendTimeout, $lastWillTopic, $lastWillMessage);
|
->setTlsVerifyPeer(Arr::get($config, 'tls.verify_peer', true))
|
||||||
|
->setTlsVerifyPeerName(Arr::get($config, 'tls.verify_peer_name', true))
|
||||||
|
->setTlsCertificateAuthorityFile(Arr::get($config, 'tls.ca_file'))
|
||||||
|
->setTlsCertificateAuthorityPath(Arr::get($config, 'tls.ca_path'))
|
||||||
|
->setTlsClientCertificateFile(Arr::get($config, 'tls.client_certificate_file'))
|
||||||
|
->setTlsClientCertificateKeyFile(Arr::get($config, 'tls.client_certificate_key_file'))
|
||||||
|
->setTlsClientCertificateKeyPassphrase(Arr::get($config, 'tls.client_certificate_key_passphrase'))
|
||||||
|
->setLastWillTopic(Arr::get($config, 'last_will.topic'))
|
||||||
|
->setLastWillMessage(Arr::get($config, 'last_will.message'))
|
||||||
|
->setLastWillQualityOfService(Arr::get($config, 'last_will.quality_of_service', MqttClient::QOS_AT_MOST_ONCE))
|
||||||
|
->setRetainLastWill(Arr::get($config, 'last_will.retain', false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace PhpMqtt\Client\Exceptions;
|
||||||
*
|
*
|
||||||
* @package PhpMqtt\Client\Exceptions
|
* @package PhpMqtt\Client\Exceptions
|
||||||
*/
|
*/
|
||||||
class ConnectionNotAvailableException extends MQTTClientException
|
class ConnectionNotAvailableException extends MqttClientException
|
||||||
{
|
{
|
||||||
public function __construct(string $name)
|
public function __construct(string $name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,12 +6,12 @@ namespace PhpMqtt\Client\Facades;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Facade;
|
use Illuminate\Support\Facades\Facade;
|
||||||
use PhpMqtt\Client\ConnectionManager;
|
use PhpMqtt\Client\ConnectionManager;
|
||||||
use PhpMqtt\Client\MQTTClient;
|
use PhpMqtt\Client\Contracts\MqttClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @method static MQTTClient connection(string $name = null)
|
* @method static MqttClient connection(string $name = null)
|
||||||
* @method static void close(string $connection = null)
|
* @method static void disconnect(string $connection = null)
|
||||||
* @method static void publish(string $topic, string $message, string $connection = null)
|
* @method static void publish(string $topic, string $message, bool $retain = false, string $connection = null)
|
||||||
*
|
*
|
||||||
* @see ConnectionManager
|
* @see ConnectionManager
|
||||||
* @package PhpMqtt\Client\Facades
|
* @package PhpMqtt\Client\Facades
|
||||||
|
|
|
@ -21,24 +21,26 @@ class MqttClientServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function register(): void
|
public function register(): void
|
||||||
{
|
{
|
||||||
$this->registerConfig();
|
$this->mergeConfigFrom(__DIR__ . '/../config/mqtt-client.php', 'mqtt-client');
|
||||||
|
|
||||||
$this->registerServices();
|
$this->registerServices();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publishes and merges the configuration of the package.
|
* Bootstrap any application services.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
* @throws \BadFunctionCallException
|
||||||
*/
|
*/
|
||||||
protected function registerConfig(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
$configPath = __DIR__ . '/../config/mqtt-client.php';
|
if (!function_exists('config_path')) {
|
||||||
|
throw new \BadFunctionCallException('config_path() function not found. Is the Laravel framework installed?');
|
||||||
if ($this->app->runningInConsole()) {
|
|
||||||
$this->publishes([$configPath => config_path('mqtt-client.php')], 'config');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mergeConfigFrom($configPath, 'mqtt-client');
|
if ($this->app->runningInConsole()) {
|
||||||
|
$this->publishes([__DIR__ . '/../config/mqtt-client.php' => config_path('mqtt-client.php')], 'config');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,6 +52,7 @@ class MqttClientServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
$this->app->bind(ConnectionManager::class, function (Application $app) {
|
$this->app->bind(ConnectionManager::class, function (Application $app) {
|
||||||
$config = $app->make('config')->get('mqtt-client', []);
|
$config = $app->make('config')->get('mqtt-client', []);
|
||||||
|
|
||||||
return new ConnectionManager($app, $config);
|
return new ConnectionManager($app, $config);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue