Non-blocking, event-driven Swift client for MQTT (3.1.1) build on SwiftNIO.
Use the SPM string to easily include the dependendency in your Package.swift file.
.package(url: "https://github.com/sroebert/mqtt-nio.git", from: ...)
MQTTNIO supports the following platforms:
- Ubuntu 14.04+
- macOS 10.12+
This package has three dependencies:
apple/swift-nio
for IOapple/swift-nio-ssl
for TLSapple/swift-log
for logging
This package has no additional system dependencies.
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.
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")
}
}
client.unsubscribe(from: "some/topic").whenComplete { result in
switch result {
case .success:
print("Unsubscribed!")
case .failure:
print("Server did not respond")
}
}
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
)
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)")
}