Skip to content

Commit 6a528d0

Browse files
committed
feat(buffer): let buffer timeout/silosMaxNumber can be configured
1 parent 67817ef commit 6a528d0

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

Example/Example/ViewController.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,15 @@ extension ViewController: CocoaMQTTDelegate {
153153
}
154154

155155
func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
156-
print("didPublishMessage with message: \(message.string)")
156+
print("didPublishMessage with message: \(message.string ?? "")")
157157
}
158158

159159
func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) {
160160
print("didPublishAck with id: \(id)")
161161
}
162162

163163
func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
164-
print("didReceivedMessage: \(message.string) with id \(id)")
164+
print("didReceivedMessage: \(message.string ?? "") with id \(id)")
165165
let name = NSNotification.Name(rawValue: "MQTTMessageNotification" + animal!)
166166
NotificationCenter.default.post(name: name, object: self, userInfo: ["message": message.string!, "topic": message.topic])
167167
}

Source/CocoaMQTT.swift

+10-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,15 @@ open class CocoaMQTT: NSObject, CocoaMQTTClient, CocoaMQTTFrameBufferProtocol {
136136
open var dispatchQueue = DispatchQueue.main
137137

138138
// flow control
139-
var buffer = CocoaMQTTFrameBuffer()
139+
fileprivate var buffer = CocoaMQTTFrameBuffer()
140+
open var bufferSilosTimeout: Double {
141+
get { return buffer.timeout }
142+
set { buffer.timeout = newValue }
143+
}
144+
open var bufferSilosMaxNumber: UInt {
145+
get { return buffer.silosMaxNumber }
146+
set { buffer.silosMaxNumber = newValue }
147+
}
140148

141149

142150
// heart beat
@@ -192,6 +200,7 @@ open class CocoaMQTT: NSObject, CocoaMQTTClient, CocoaMQTTFrameBufferProtocol {
192200
socket.disconnect()
193201
}
194202

203+
// MARK: CocoaMQTTFrameBufferProtocol
195204
public func buffer(_ buffer: CocoaMQTTFrameBuffer, sendPublishFrame frame: CocoaMQTTFramePublish) {
196205
send(frame, tag: Int(frame.msgid!))
197206
}

Source/CocoaMQTTFrame.swift

+4-3
Original file line numberDiff line numberDiff line change
@@ -427,16 +427,17 @@ open class CocoaMQTTFrameBuffer: NSObject {
427427

428428
// flow control
429429
fileprivate var silos = [CocoaMQTTFramePublish]()
430-
fileprivate var silosMaxNumber = 10
431430
fileprivate var buffer = [CocoaMQTTFramePublish]()
432431
fileprivate var bufferSize = 1000
432+
var silosMaxNumber: UInt = 10
433+
var timeout: Double = 60
433434
//TODO: bufferCapacity
434435
//fileprivate var bufferCapacity = 50.MB // unit: byte
435436

436437
//
437438
var isBufferEmpty: Bool { get { return buffer.count == 0 }}
438439
var isBufferFull : Bool { get { return buffer.count > bufferSize }}
439-
var isSilosFull : Bool { get { return silos.count >= silosMaxNumber }}
440+
var isSilosFull : Bool { get { return silos.count >= Int(silosMaxNumber) }}
440441

441442

442443
// return false means the frame is rejected because of the buffer is full
@@ -460,7 +461,7 @@ open class CocoaMQTTFrameBuffer: NSObject {
460461

461462
send(frame)
462463

463-
Timer.after(60.seconds) {
464+
Timer.after(timeout.seconds) {
464465
let msgid = frame.msgid!
465466
if self.removeFrameFromSilos(withMsgid: msgid) {
466467
printDebug("timeout of frame:\(msgid)")

0 commit comments

Comments
 (0)