77 lines
1.5 KiB
Lua
77 lines
1.5 KiB
Lua
-- Load MQTT library
|
|
local mqtt = require("mqtt")
|
|
local client
|
|
|
|
local maxClientId = ...
|
|
|
|
local eventChannel = love.thread.getChannel("mqtt_event")
|
|
local commandChannel = love.thread.getChannel("mqtt_command")
|
|
|
|
local function call(target, ...)
|
|
local args = {...}
|
|
eventChannel:push {
|
|
target = target,
|
|
args = args
|
|
}
|
|
end
|
|
|
|
local function onConnect(connack)
|
|
print("On connect")
|
|
call("connect", connack)
|
|
end
|
|
|
|
local function onMessage(message)
|
|
if message.topic:sub(0, 7) == "spider/" then
|
|
message.topic = message.topic:sub(8)
|
|
end
|
|
print(message.topic)
|
|
call("message2", message.topic, message.payload)
|
|
end
|
|
|
|
local function onCommand(command)
|
|
if command.command == "send" then
|
|
client:publish {
|
|
topic = "spider/" .. command.topic,
|
|
payload = command.arg,
|
|
qos = 0
|
|
}
|
|
elseif command.command == "subscribe" then
|
|
local topic = "spider/" .. command.topic
|
|
assert(client:subscribe {
|
|
topic = topic
|
|
})
|
|
print("Subscribed to " .. topic)
|
|
print("Subscribed to " .. topic)
|
|
end
|
|
end
|
|
|
|
local function main()
|
|
client = mqtt.client {
|
|
uri = "mqtt.seeseepuff.be",
|
|
id = "mqtt_controller-" .. math.random(0, maxClientId),
|
|
clean = true,
|
|
reconnect = 5,
|
|
}
|
|
|
|
client:on {
|
|
connect = onConnect,
|
|
message = onMessage,
|
|
error = function(message)
|
|
print("MQTT error: " .. message)
|
|
end
|
|
}
|
|
|
|
print("Connecting")
|
|
local ioloop = mqtt.get_ioloop()
|
|
local i = 0
|
|
ioloop:add(function()
|
|
local command = commandChannel:pop()
|
|
if command then
|
|
onCommand(command)
|
|
end
|
|
end)
|
|
mqtt.run_ioloop(client)
|
|
end
|
|
|
|
main()
|