jsdw_ios/Pods/CocoaMQTT/Source/MqttSubscription.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
}
}