mqtt.lua
local mqttMediator = require("mediator2")()
local function splitTopic(str)
local fields = {}
str:gsub("([^/]*)", function(c) fields[#fields+1] = c end)
return fields
end
local function mqttPublish(topic, ...)
return mqttMediator:publish(splitTopic(topic), ...)
end
local function mqttSubscribe(topic, handler, options)
local segments = splitTopic(topic)
for i, segment in ipairs(segments) do
if segment == "+" then
segments[i] = mqttMediator.WILDCARD
end
end
options = options or {}
if segments[#segments] == "#" then
segments[#segments] = mqttMediator.WILDCARD
options.skipChildren = false
else
options.skipChildren = true
end
return mqttMediator:addSubscriber(segments, handler, options)
end
mqttSubscribe("foo/bar/baz", function(...)
print("\tfoo/bar/baz: ", ...)
end)
mqttSubscribe("foo/+/baz", function(...)
print("\tfoo/+/baz: ", ...)
end)
mqttSubscribe("foo/bar/+", function(...)
print("\tfoo/bar/+: ", ...)
end)
mqttSubscribe("foo/#", function(...)
print("\tfoo/#: ", ...)
end)
print("foo/bar/baz")
mqttPublish("foo/bar/baz", "hello to foo/bar/baz")
print("foo/no-bar/baz")
mqttPublish("foo/no-bar/baz", "hello to foo/no-bar/baz")
print("foo//baz")
mqttPublish("foo//baz", "hello to foo//baz") print("foo/baz")
mqttPublish("foo/baz", "hello to foo/baz")
print("foo")
mqttPublish("foo", "hello to foo")