77 lines
1.8 KiB
Swift
77 lines
1.8 KiB
Swift
//
|
|
// MqttSubscription.swift
|
|
// CocoaMQTT
|
|
//
|
|
// Created by liwei wang on 2021/7/15.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// 3.8.3.1 Subscription Options
|
|
public class MqttSubscription {
|
|
|
|
public var topic: String
|
|
public var qos = CocoaMQTTQoS.qos1
|
|
public var noLocal: Bool = false
|
|
public var retainAsPublished: Bool = false
|
|
public var retainHandling: CocoaRetainHandlingOption = .sendOnSubscribe
|
|
public var subscriptionOptions: Bool = false
|
|
|
|
public init(topic: String) {
|
|
self.topic = topic
|
|
}
|
|
|
|
public init(topic: String, qos: CocoaMQTTQoS) {
|
|
self.topic = topic
|
|
self.qos = qos
|
|
}
|
|
|
|
var subscriptionData: [UInt8] {
|
|
var data = [UInt8]()
|
|
|
|
data += topic.bytesWithLength
|
|
|
|
var options: Int = 0
|
|
switch self.qos {
|
|
case .qos0:
|
|
options = options | 0b0000_0000
|
|
case .qos1:
|
|
options = options | 0b0000_0001
|
|
case .qos2:
|
|
options = options | 0b0000_0010
|
|
default:
|
|
printDebug("topicFilter qos failure")
|
|
}
|
|
|
|
switch self.noLocal {
|
|
case true:
|
|
options = options | 0b0000_0100
|
|
case false:
|
|
options = options | 0b0000_0000
|
|
}
|
|
|
|
switch self.retainAsPublished {
|
|
case true:
|
|
options = options | 0b0000_1000
|
|
case false:
|
|
options = options | 0b0000_0000
|
|
}
|
|
|
|
switch self.retainHandling {
|
|
case CocoaRetainHandlingOption.none:
|
|
options = options | 0b0010_0000
|
|
case CocoaRetainHandlingOption.sendOnlyWhenSubscribeIsNew:
|
|
options = options | 0b0001_0000
|
|
case CocoaRetainHandlingOption.sendOnSubscribe:
|
|
options = options | 0b0000_0000
|
|
}
|
|
|
|
if subscriptionOptions {
|
|
data += [UInt8(options)]
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
}
|