@@ -77,21 +77,28 @@ public class NutellaNet: SimpleMQTTClientDelegate {
7777 if let an = delegate? . actorName {
7878 actorName = an
7979 }
80- var finalMessage : [ String : AnyObject ] = [ " payload " : message,
81- " from " : actorName]
80+ var finalMessage : [ String : AnyObject ] = [ String: AnyObject] ( )
81+ if message is String {
82+ finalMessage = [ " payload " : message,
83+ " from " : actorName]
84+ }
85+ else if let m = message as? Dictionary < String , AnyObject > {
86+ finalMessage [ " from " ] = actorName
87+ finalMessage. update ( m)
88+ }
8289 var json = JSON ( finalMessage)
8390
8491 mqtt. publish ( urlInit+ channel, message: json. rawString ( options: nil ) !)
8592 }
8693
8794 /**
88- Execute a sychronous request of information on the specified Nutella channel.
95+ Execute an asychronous request of information on the specified Nutella channel.
8996
9097 :param: channel The name of the channel on which executing the request.
91- :param: message A dictionary that represent the message.
98+ :param: message A message that can be bot Dictionary or a String
9299 :param: requestName An optional name assigned to the request in order to recognize it later.
93100 */
94- public func syncRequest ( channel: String , message: [ String : AnyObject ] , requestName: String ? ) {
101+ public func asyncRequest ( channel: String , message: AnyObject , requestName: String ? ) {
95102 var id = Int ( arc4random_uniform ( 1000000000 ) )
96103 // FIX: there's the possibility (1/1000000000 of times) that two requests have the same id. You're more likely to win the lottery.
97104
@@ -102,18 +109,25 @@ public class NutellaNet: SimpleMQTTClientDelegate {
102109
103110 mqtt. subscribe ( urlInit+ channel)
104111
105- var finalMessage : [ String : AnyObject ] = [ " payload " : message,
106- " id " : id,
107- " messageType " : " request " ]
112+ var finalMessage : [ String : AnyObject ] = [ " id " : id,
113+ " messageType " : " request " ]
114+
115+ if message is String {
116+ finalMessage [ " payload " ] = message
117+ }
118+ else if let m = message as? Dictionary < String , AnyObject > {
119+ finalMessage. update ( m)
120+ }
121+
108122
109123 var json = JSON ( finalMessage)
110124 mqtt. publish ( urlInit+ channel, message: json. rawString ( options: nil ) !)
111125 }
112126
113127 /**
114- Not yet implemented, sorry, use syncRequest that is almost the same
128+ Not yet implemented, sorry, use asyncRequest that is almost the same
115129 */
116- public func asyncRequest ( channel: String , message: String , requestName: String ? ) {
130+ public func syncRequest ( channel: String , message: String , requestName: String ? ) {
117131
118132 }
119133
@@ -165,22 +179,26 @@ public class NutellaNet: SimpleMQTTClientDelegate {
165179 if let id = jsonDic [ " id " ] as? Int {
166180 if let messageType = jsonDic [ " messageType " ] as? String {
167181 if messageType == " request " {
168- if let payload: AnyObject = jsonDic [ " payload " ] {
169- if contains ( self . handlingChannels, channel) {
170- //println("Valid request")
171- // Reply if the delegate implements the requestReceived function
172- if let reply: AnyObject = self . delegate? . requestReceived ( newChannel, request: payload) {
173-
174- //Publish the message
175- var finalMessage : [ String : AnyObject ] = [ " id " : id,
176- " messageType " : " response " ,
177- " payload " : reply]
178- var json = JSON ( finalMessage)
179-
180- mqtt. publish ( channel, message: json. rawString ( options: nil ) !)
181-
182- requestResponse = true
182+ if contains ( self . handlingChannels, channel) {
183+ //println("Valid request")
184+ // Reply if the delegate implements the requestReceived function
185+ if let reply: AnyObject = self . delegate? . requestReceived ( newChannel, request: jsonDic) {
186+
187+ //Publish the message
188+ var finalMessage : [ String : AnyObject ] = [ " id " : id,
189+ " messageType " : " response " ]
190+
191+ if reply is String {
192+ finalMessage [ " payload " ] = reply
183193 }
194+ else if let r = reply as? Dictionary < String , AnyObject > {
195+ finalMessage. update ( r)
196+ }
197+ var json = JSON ( finalMessage)
198+
199+ mqtt. publish ( channel, message: json. rawString ( options: nil ) !)
200+
201+ requestResponse = true
184202 }
185203 }
186204 }
@@ -191,25 +209,21 @@ public class NutellaNet: SimpleMQTTClientDelegate {
191209 if let id = jsonDic [ " id " ] as? Int {
192210 if let messageType = jsonDic [ " messageType " ] as? String {
193211 if messageType == " response " {
194- if let payload: AnyObject = jsonDic [ " payload " ] {
195- if let request = requests [ id] {
196- //println("Valid response")
197- self . delegate? . responseReceived ( newChannel,
198- requestName: request. name,
199- response: payload)
200-
201- requestResponse = true
202- }
212+ if let request = requests [ id] {
213+ //println("Valid response")
214+ self . delegate? . responseReceived ( newChannel,
215+ requestName: request. name,
216+ response: jsonDic)
217+
218+ requestResponse = true
203219 }
204220 }
205221 }
206222 }
207223
208224 if requestResponse == false {
209225 if let from = jsonDic [ " from " ] as? String {
210- if let payload: AnyObject = jsonDic [ " payload " ] {
211- self . delegate? . messageReceived ( newChannel, message: payload, from: from)
212- }
226+ self . delegate? . messageReceived ( newChannel, message: jsonDic, from: from)
213227 }
214228 }
215229 }
0 commit comments