@@ -463,9 +463,9 @@ public final class MQTTClient {
463463 }
464464
465465 var connectionParameters = ConnectionParameters ( )
466- let publishListeners = MQTTListeners < MQTTPublishInfo > ( )
467- let closeListeners = MQTTListeners < Void > ( )
468- let shutdownListeners = MQTTListeners < Void > ( )
466+ let publishListeners = MQTTListeners < Result < MQTTPublishInfo , Error > > ( )
467+ let closeListeners = MQTTListeners < Result < Void , Error > > ( )
468+ let shutdownListeners = MQTTListeners < Result < Void , Error > > ( )
469469 private var _connection : MQTTConnection ?
470470 private var lock = NIOLock ( )
471471}
@@ -477,8 +477,17 @@ extension MQTTClient {
477477 authWorkflow: ( ( MQTTAuthV5 , EventLoop ) -> EventLoopFuture < MQTTAuthV5 > ) ? = nil
478478 ) -> EventLoopFuture < MQTTConnAckPacket > {
479479 let pingInterval = self . configuration. pingInterval ?? TimeAmount . seconds ( max ( Int64 ( packet. keepAliveSeconds - 5 ) , 5 ) )
480-
481- let connectFuture = MQTTConnection . create ( client: self , pingInterval: pingInterval)
480+ var cleanSession = packet. cleanSession
481+ // if connection has non zero session expiry then assume it doesnt clean session on close
482+ for p in packet. properties {
483+ // check topic alias
484+ if case . sessionExpiryInterval( let interval) = p {
485+ if interval > 0 {
486+ cleanSession = false
487+ }
488+ }
489+ }
490+ let connectFuture = MQTTConnection . create ( client: self , cleanSession: cleanSession, pingInterval: pingInterval)
482491 let eventLoop = connectFuture. eventLoop
483492 return
484493 connectFuture
0 commit comments