Skip to content

Commit d3b372f

Browse files
committed
Optimize the implementation logic of MQTTDelegate
1 parent 4ab6585 commit d3b372f

File tree

1 file changed

+24
-22
lines changed

1 file changed

+24
-22
lines changed

Sources/MQTT/Client.swift

+24-22
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ open class MQTTClient:@unchecked Sendable{
3131
public var delegateQueue:DispatchQueue
3232
/// message delegate
3333
public weak var delegate:MQTTDelegate?
34-
private let notify = NotificationCenter()
34+
/// auto create when some observer has been added
35+
private var notify:NotificationCenter?
36+
/// internal network process queue
3537
private let queue:DispatchQueue
3638
//--- Keep safely by sharing a same status lock ---
3739
private let safe = Safely()//status safe lock
@@ -850,46 +852,46 @@ extension MQTTClient{
850852
/// - selector: callback selector
851853
/// - Important:Note that this operation will strongly references `observer`. The observer must be removed when not in use. Don't add `self`. If really necessary please use `delegate`
852854
public func addObserver(_ observer:Any,for type:ObserverType,selector:Selector){
853-
notify.addObserver(observer, selector: selector, name: type.notifyName, object: self)
855+
if self.notify == nil {
856+
self.notify = NotificationCenter()
857+
}
858+
notify?.addObserver(observer, selector: selector, name: type.notifyName, object: self)
854859
}
855860
/// Remove some type of observer
856861
public func removeObserver(_ observer:Any,for type:ObserverType){
857-
notify.removeObserver(observer, name: type.notifyName, object: self)
862+
notify?.removeObserver(observer, name: type.notifyName, object: self)
858863
}
859864
/// Remove all types of observer
860865
public func removeObserver(_ observer:Any){
861866
ObserverType.allCases.forEach {
862-
self.notify.removeObserver(observer, name: $0.notifyName, object: self)
867+
self.notify?.removeObserver(observer, name: $0.notifyName, object: self)
863868
}
864869
}
865870
func notify(message:Message){
866-
guard let delegate = delegate else{
867-
return
868-
}
869871
self.delegateQueue.async {
870-
delegate.mqtt(self, didReceive: message)
871-
let info = ["message":message]
872-
self.notify.post(name: ObserverType.message.notifyName, object: self, userInfo: info)
872+
self.delegate?.mqtt(self, didReceive: message)
873+
if let notify = self.notify{
874+
let info = ["message":message]
875+
notify.post(name: ObserverType.message.notifyName, object: self, userInfo: info)
876+
}
873877
}
874878
}
875879
func notify(error:Error){
876-
guard let delegate = delegate else{
877-
return
878-
}
879880
self.delegateQueue.async {
880-
delegate.mqtt(self, didReceive: error)
881-
let info:[String:Error] = ["error":error]
882-
self.notify.post(name: ObserverType.error.notifyName, object: self, userInfo:info)
881+
self.delegate?.mqtt(self, didReceive: error)
882+
if let notify = self.notify{
883+
let info:[String:Error] = ["error":error]
884+
notify.post(name: ObserverType.error.notifyName, object: self, userInfo:info)
885+
}
883886
}
884887
}
885888
func notify(status:Status,old:Status){
886-
guard let delegate = delegate else{
887-
return
888-
}
889889
self.delegateQueue.async {
890-
delegate.mqtt(self, didUpdate: status, prev: old)
891-
let info:[String:Status] = ["old":old,"new":status]
892-
self.notify.post(name: ObserverType.status.notifyName, object: self, userInfo: info)
890+
if let notify = self.notify{
891+
let info:[String:Status] = ["old":old,"new":status]
892+
notify.post(name: ObserverType.status.notifyName, object: self, userInfo: info)
893+
}
894+
self.delegate?.mqtt(self, didUpdate: status, prev: old)
893895
}
894896
}
895897
}

0 commit comments

Comments
 (0)