Files
TerracottaWarriors/Plugins/MqttClient/Source/DTMqtt/DTMqtt/DTMqttClient.h
2025-07-14 22:24:27 +08:00

125 lines
4.2 KiB
C++

// Copyright 2023 Dexter.Wan. All Rights Reserved.
// EMail: 45141961@qq.com
#pragma once
#include "CoreMinimal.h"
#include "DTMqttHead.h"
#include "UObject/Object.h"
#include "DTMqttClient.generated.h"
UENUM()
enum class EDT_QualityOfService : uint8
{
QoS0 = 0 UMETA(DisplayName = "QoS0", ToolTip = "At most once"),
QoS1 = 1 UMETA(DisplayName = "QoS1", ToolTip = "At least once"),
QoS2 = 2 UMETA(DisplayName = "QoS2", ToolTip = "Exactly once"),
};
/**
* Lightweight client for talking to an MQTT server using non-blocking
*/
UCLASS(BlueprintType, meta=(DisplayName="DT Mqtt Client"))
class DTMQTT_API UDTMqttClient : public UObject, public mqtt::callback
{
GENERATED_BODY()
public:
DECLARE_DYNAMIC_DELEGATE_OneParam(FConnected, const FString&, Cause);
DECLARE_DYNAMIC_DELEGATE_OneParam(FConnectionLost, const FString&, Cause);
DECLARE_DYNAMIC_DELEGATE_TwoParams(FMessageArrived, const FString&, Topic, const FString&, Message);
public:
TSharedPtr<mqtt::async_client> MqttClient;
mqtt::connect_options ConnectOptions;
public:
FConnected OnConnected;
FConnectionLost OnConnectionLost;
FMessageArrived OnMessageArrived;
// mqtt 回调接口
public:
virtual void connected(const mqtt::string& cause) override;
virtual void connection_lost(const mqtt::string& cause) override;
virtual void message_arrived(mqtt::const_message_ptr msg) override;
// object 接口回调
public:
virtual void FinishDestroy() override;
public:
/**
* Create an MQTT client object
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
static void CreateMqttClient(UDTMqttClient *& MqttClient);
/**
* Connects to an MQTT server using the provided connect options.
* Param Url : the address of the server to connect to, specified
* as a URI.
* Param ClientId : a client identifier that is unique on the server
* being connected to
* Param UserName : The user name for connecting to the MQTT broker.
* Param Password : The password for connecting to the MQTT broker.
*/
UFUNCTION(BlueprintCallable, meta=(KeepAliveInterval=60), Category="DT Mqtt")
void Connect( const FString & ServerUrl, const FString & ClientId, const FString & UserName, const FString & Password, int KeepAliveInterval, bool & Success, FString & ErrorMsg );
/**
* Subscribe to a topic, which may include wildcards.
* Param TopicFilter : the topic to subscribe to, which can include
* wildcards.
* Param QoS : The quality of service for the subscription
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void Subscribe( const FString & TopicFilter, EDT_QualityOfService QoS, bool & Success, FString & ErrorMsg );
/**
* Requests the server unsubscribe the client from a topic.
* Param TopicFilter : the topic to unsubscribe from. It must match a
* topicFilter specified on an earlier subscribe.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void UnSubscribe( const FString & TopicFilter, bool & Success, FString & ErrorMsg );
/**
* Publishes a message to a topic on the server
* Param Topic : The topic to deliver the message to
* Param Message : sent message
* Param QoS : the Quality of Service to deliver the message at. Valid
* values are 0, 1 or 2.
* Param Retained : whether or not this message should be retained by the
* server.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void Publish( const FString & Topic, const FString & Message, EDT_QualityOfService QoS, bool Retained, bool & Success, FString & ErrorMsg );
/**
* Disconnects from the server.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void Disconnect(bool & Success, FString & ErrorMsg);
/**
* This method is called when the client is connected.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void BindConnectedDelegate(const FConnected Connected);
/**
* This method is called when the connection to the server is lost.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void BindConnectionLostDelegate(const FConnectionLost ConnectionLost);
/**
* This method is called when a message arrives from the server.
*/
UFUNCTION(BlueprintCallable, Category="DT Mqtt")
void BindMessageDelegate(const FMessageArrived MessageArrived);
};