> For the complete documentation index, see [llms.txt](https://vc-docs.gitbook.io/engine/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vc-docs.gitbook.io/engine/home/doxygen_synced/files/_m_q_t_t_8cs.md).

# Source/MQTT.cs

## Classes

|       | Name                                                                                                                                                                                                                                                                                                  |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| class | <p><a href="https://git.unimetaverse.net/vc-core-engine/doxygen/-/blob/main/Files/Classes/class_m_q_t_t_client.md"><strong>MQTTClient</strong></a><br>MQTT client for connecting to a broker, subscribing to topics, and publishing messages over the MQTT protocol with optional TLS encryption.</p> |

## Source code

```csharp

public class MQTTClient
{
  public enum ServiceLevel
  {
    AtMostOnce = MqttQualityOfServiceLevel.AtMostOnce,
    AtLeastOnce = MqttQualityOfServiceLevel.AtLeastOnce,
    ExactlyOnce = MqttQualityOfServiceLevel.ExactlyOnce
  }

  MQTTManager _manager;

  public MQTTClient()
  {
    _manager = new();
  }

  public void Connect(string uri, int port, string clientID, string userName, string password, byte[] derRootCertificate, Action<bool> callback)
  {
    ConnectAsync(uri, port, clientID, userName, password, derRootCertificate, callback).Forget();
  }

  public void Disconnect()
  {
    _manager.Disconnect().Forget();
  }

  public void SubscribeTopic(string topic, ServiceLevel serviceLevel)
  {
    _manager.SubscribeTopic(topic, (MqttQualityOfServiceLevel)serviceLevel).Forget();
  }

  public void UnsubscribeTopic(string topic)
  {
    _manager.UnsubscribeTopic(topic).Forget();
  }

  public void PublishToTopic(string topic, string data)
  {
    _manager.PublishToTopic(topic, data).Forget();
  }

  public void CallbackOnMessageReceived(Action<string, string> callback)
  {
    _manager.OnMessageReceived += callback;
  }

  public static Byte[] LoadDerFromPem(string pem)
  {
    return MQTTManager.LoadDerFromPem(pem);
  }

  async UniTaskVoid ConnectAsync(string uri, int port, string clientID, string userName, string password, byte[] derRootCertificate, Action<bool> callback)
  {
    bool result = await _manager.Connect(uri, port, clientID, userName, password, derRootCertificate);
    callback(result);
  }
}
```

***

Updated on 2026-06-23 at 10:43:25 +0800
