You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

65 lines
1.8 KiB

<?php
declare(strict_types=1);
namespace App\TaskWorker;
use App\Libs\MQTTClient;
use Hyperf\Task\Annotation\Task;
class MQTTClientTask
{
protected $mqttClient = null;
/**
* @Task
* @param string|number $message 消息内容
* @param string $topic 发布消息到主题,主题名
* @param string $type 消息类型,cash或tts
* @param string $payId 支付方式,如“支付宝”、“微信”等
* @param string $toClientId 终端id,如IMEI码
* @param string $curClientId 当前客户端id
*/
public function publish(
$message,
$topic,
$toClientId = '',
$type = '',
$payId = '',
$curClientId = ''
) {
$this->getClient();
$msgArr = [];
if ( (empty($type)&&is_numeric($message)) || 'cash' === $type ) {
$msgArr['cash'] = $message;
$payId AND $msgArr['payid'] = $payId;
} else {
$msgArr['message'] = $message;
}
if (!empty($toClientId)) {
$topic .= '/'.$toClientId;
}
$curClientId OR $curClientId = (string)rand(1,999999999);
$success = $this->mqttClient->sendConnect($curClientId);
if ($success) {
$this->mqttClient->sendPublish($topic, json_encode($msgArr), MQTTClient::MQTT_QOS2);
$this->mqttClient->sendDisconnect();
}
$this->mqttClient->close();
}
protected function getClient()
{
$this->mqttClient = new MQTTClient(env('MQTT_HOST'), env('MQTT_PORT'));
$this->mqttClient->setAuthentication(env('MQTT_NAME'), env('MQTT_PASS'));
if (env('MQTT_CERT')) {
$this->mqttClient->setEncryption(env('MQTT_CERT'));
}
return $this->mqttClient;
}
}