diff --git a/src/interface.jl b/src/interface.jl index c5cee00..40b342b 100644 --- a/src/interface.jl +++ b/src/interface.jl @@ -204,7 +204,7 @@ end """ function mqttReconnect!(client::mqttClient) if client.connectStatus == false - Mosquitto.disconnect(client) # disconnect to release port before attemping new connection + Mosquitto.disconnect(client.clientInstance) # disconnect to release port before attemping new connection if client.userName === nothing # check if the member needs username/password result = Mosquitto.connect(client.clientInstance, client.broker, client.port) @@ -239,16 +239,26 @@ end """ mqtt communication loop, call this function manually """ -function mqttRun(client::mqttClient) +function mqttRun(client::mqttClient, userMsgHandler::Function) mqttLoop!(client) mqttCheckConnection!(client) mqttReconnect!(client) mqttSubOnConnect!(client) + mqttOnmessage!(client, userMsgHandler) end -# What to do if there is a message -function mqttOnmessage!(client::mqttClient, msgHandler::Function) +""" + userMsgHandler. A user defined function in user space. + + # Example + + function mqttMsgHander(topic::String, payload) + # this function access workSpace by global variable and do something with msg + end + +""" +function mqttOnmessage!(client::mqttClient, userMsgHandler::Function) nmessages = Base.n_avail(get_messages_channel()) nmessages == 0 && return 0 @@ -260,7 +270,7 @@ function mqttOnmessage!(client::mqttClient, msgHandler::Function) _ = take!(get_messages_channel()) # discard new arrival package end elseif timepass > 1 && client.retainedMsgCleared == false - workDict[:retainedMsgCleared] = true + client.retainedMsgCleared = true println("retained mqtt messages cleared") else for i = 1:nmessages @@ -270,12 +280,14 @@ function mqttOnmessage!(client::mqttClient, msgHandler::Function) payload = vecToDict(pkg.payload) # payload in Dict format # Do something with the message - msgHandler(topic, payload) + println("call userMsgHandler") + userMsgHandler(topic, payload) # user defined function in user space. How to handle msg end end end + function publish(client::mqttClient, msg::Dict, pubtopic::String="") Mosquitto.publish(client.clientInstance, pubtopic, JSON3.write(msg)) end @@ -284,24 +296,6 @@ end """ request function check msg for additional communication info in addition to publish() """ -# function request(client::mqttClient, msg::Dict; pubtopic::String="") -# if pubtopic != "" -# Mosquitto.publish(client.clientInstance, pubtopic, JSON3.write(msg)) -# elseif msg[:msgMeta][:sendto] != "" -# Mosquitto.publish(client.clientInstance, msg[:msgMeta][:sendto], JSON3.write(msg)) -# else -# if length(client.pubtopic) != 0 - -# for (k, topic) in pairs(client.pubtopic) -# println("pub to $k") -# Mosquitto.publish(client.clientInstance, topic, JSON3.write(msg)) -# end -# else -# error("publish topic not defined") -# end -# end -# end - function request(client::mqttClient, msg::Dict; pubtopic::String="") pubto = Vector{String}() if pubtopic != ""