/mqtt-nio

Non-blocking, event-driven Swift client for MQTT.

Primary LanguageSwiftMIT LicenseMIT

MQTTNIO

Non-blocking, event-driven Swift client for MQTT (3.1.1) build on SwiftNIO.

test

Installation

Use the SPM string to easily include the dependendency in your Package.swift file.

.package(url: "https://github.com/sroebert/mqtt-nio.git", from: ...)

Supported Platforms

MQTTNIO supports the following platforms:

  • Ubuntu 14.04+
  • macOS 10.12+

Dependencies

This package has three dependencies:

This package has no additional system dependencies.

Usage

Create Client and Connect

let group = MultiThreadedEventLoopGroup(numberOfThreads: 2)
let client = MQTTClient(
    configuration: .init(
        target: .host("127.0.0.1", port: 1883),
    ),
    eventLoopGroup: group
)
client.connect()

The client automatically reconnects when failing to connect or when disconnected from the broker.

Subscribe

client.subscribe(to: "some/topic").whenComplete { result in
    switch result {
    case .success(.success):
        print("Subscribed!")
    case .success(.failure):
        print("Server rejected")
    case .failure:
        print("Server did not respond")
    }
}

Unsubscribe

client.unsubscribe(from: "some/topic").whenComplete { result in
    switch result {
    case .success:
        print("Unsubscribed!")
    case .failure:
        print("Server did not respond")
    }
}

Publish

client.publish(
    topic: "some/topic",
    payload: "Hello World!",
    qos: .exactlyOnce
)
client.publish(topic: "some/topic", payload: "Hello World!")
client.publish(
    topic: "some/topic",
    payload: "Hello World!",
    retain: true
)

Add listeners to know when the client connects/disconnects, receives errors and messages.

client.addConnectListener { _, response, _ in
    print("Connected: \(response.returnCode)")
}
client.addDisconnectListener { _, reason, _ in
    print("Disconnected: \(reason)")
}
client.addErrorListener { _, error, _ in
    print("Error: \(error)")
}
client.addMessageListener { _, message, _ in
    print("Received: \(message)")
}