Advertisement
Guest User

Untitled

a guest
May 11th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. import UIKit
  2. import CocoaMQTT
  3.  
  4.  
  5. class MQTTViewController: BaseViewController, CocoaMQTTDelegate, MQTTPassBackDelegate {
  6.  
  7. // MARK: Internal classes
  8. class MQTTState {
  9. var connected = false
  10. var loggedIn = false
  11. }
  12.  
  13.  
  14. // MARK: Properties
  15. var mqtt: CocoaMQTT? {
  16. didSet {
  17. if mqtt == nil {
  18. state.connected = false
  19. state.loggedIn = false
  20. if oldValue?.connState == .CONNECTED {
  21. oldValue?.disconnect()
  22. }
  23. }
  24. }
  25. }
  26.  
  27. var state = MQTTState()
  28. var username: String?
  29. var password: String?
  30.  
  31. weak var delegate: MQTTPassBackDelegate? = nil
  32.  
  33.  
  34. // MARK: Lifecycle
  35. override func viewWillAppear(animated: Bool) {
  36. super.viewWillAppear(animated)
  37.  
  38. guard mqtt != nil else {
  39. mqttInit()
  40. return
  41. }
  42. }
  43.  
  44. override func viewWillDisappear(animated: Bool) {
  45. super.viewWillDisappear(animated)
  46.  
  47. if self.isMovingFromParentViewController() == true {
  48. delegate?.passBackMQTTData(mqtt, state: state, username: username, password: password)
  49. }
  50. }
  51.  
  52.  
  53. // MARK: CocoaMQTTDelegate functions
  54. func mqtt(mqtt: CocoaMQTT, didConnect host: String, port: Int) {
  55. dprint("didConnect (host):(port)")
  56. }
  57.  
  58. func mqtt(mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) {
  59. dprint("didConnectAck (ack.rawValue)")
  60. }
  61.  
  62. func mqtt(mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
  63. dprint("didPublishMessage with message: (message.string)")
  64. }
  65.  
  66. func mqtt(mqtt: CocoaMQTT, didPublishAck id: UInt16) {
  67. dprint("didPublishAck with id: (id)")
  68. }
  69.  
  70. func mqtt(mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
  71. guard message.string != nil else {
  72. dprint("didReceivedMessage: NOT STRING with id (id)")
  73. return
  74. }
  75. dprint("didReceivedMessage: (message.string) with id (id)")
  76. }
  77.  
  78. func mqtt(mqtt: CocoaMQTT, didSubscribeTopic topic: String) {
  79. dprint("didSubscribeTopic to (topic)")
  80. }
  81.  
  82. func mqtt(mqtt: CocoaMQTT, didUnsubscribeTopic topic: String) {
  83. dprint("didUnsubscribeTopic to (topic)")
  84. }
  85.  
  86. func mqttDidPing(mqtt: CocoaMQTT) {
  87. dprint("didPing")
  88. }
  89.  
  90. func mqttDidReceivePong(mqtt: CocoaMQTT) {
  91. dprint("didReceivePong")
  92. }
  93.  
  94. func mqttDidDisconnect(mqtt: CocoaMQTT, withError err: NSError?) {
  95. dprint("mqttDidDisconnect")
  96. }
  97.  
  98.  
  99. // MARK: MQTTPassBackDelegate functions
  100. func passBackMQTTData(mqtt: CocoaMQTT?, state: AnyObject, username: String?, password: String?) {
  101. dprint("passBackMQTTData")
  102. self.mqtt = mqtt
  103. self.state = state as! MQTTState
  104. self.username = username
  105. self.password = password
  106. }
  107.  
  108.  
  109. // MARK: Helpers
  110. final func pushMQTTViewControllerWithIdentifier(identifier: String) {
  111. let vc = storyboard?.instantiateViewControllerWithIdentifier(identifier) as! MQTTViewController
  112. vc.mqtt = mqtt
  113. vc.state = state
  114. vc.username = username
  115. vc.password = password
  116. vc.delegate = self
  117. navigationController!.pushViewController(vc, animated: true)
  118. }
  119.  
  120. final func mqttInit(clientIdPid: String = "ACC_MQTT-" + String(NSProcessInfo().processIdentifier)) {
  121. guard mqtt == nil else {
  122. return // Prevent reinit
  123. }
  124. mqtt = CocoaMQTT(clientId: clientIdPid, host: ACC_MQTT_SERVER, port: UInt16(ACC_MQTT_PORT))
  125. }
  126.  
  127. final func mqttSetup(username: String, password: String) {
  128. print("Attempting to connect using (username):(password)")
  129. if let mqtt = mqtt {
  130. mqtt.username = username
  131. mqtt.password = password
  132. mqtt.cleanSess = false
  133. mqtt.keepAlive = 90
  134. mqtt.delegate = self
  135. }
  136. }
  137.  
  138. }
  139.  
  140.  
  141. protocol MQTTPassBackDelegate: class {
  142.  
  143. func passBackMQTTData(mqtt: CocoaMQTT?, state: AnyObject, username: String?, password: String?)
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement