|
|
|
@ -6,55 +6,55 @@ nodes = {}
|
|
|
|
active_node = {}
|
|
|
|
active_node = {}
|
|
|
|
|
|
|
|
|
|
|
|
function network.register(addr, callback)
|
|
|
|
function network.register(addr, callback)
|
|
|
|
if nodes[addr] ~= nil then
|
|
|
|
if nodes[addr] ~= nil then
|
|
|
|
error("Address "..addr.." already registered!")
|
|
|
|
error("Address "..addr.." already registered!")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
nodes[addr] = callback
|
|
|
|
nodes[addr] = callback
|
|
|
|
|
|
|
|
|
|
|
|
active_node = {}
|
|
|
|
active_node = {}
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function network.deregister(addr)
|
|
|
|
function network.deregister(addr)
|
|
|
|
nodes[addr] = nil
|
|
|
|
nodes[addr] = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function network.send(addr, port, msg)
|
|
|
|
function network.send(addr, port, msg)
|
|
|
|
local callback = nodes[addr]
|
|
|
|
local callback = nodes[addr]
|
|
|
|
if callback == nil then
|
|
|
|
if callback == nil then
|
|
|
|
if not network.allow_blackhole then
|
|
|
|
if not network.allow_blackhole then
|
|
|
|
error("Send message to offline node: "..addr)
|
|
|
|
error("Send message to offline node: "..tostring(addr))
|
|
|
|
end
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return nil
|
|
|
|
local current_node = active_node[#active_node]
|
|
|
|
end
|
|
|
|
-- Push target onto node-stack
|
|
|
|
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
local current_node = active_node[#active_node]
|
|
|
|
-- print("Sending from "..current_node.." to "..addr..": "..msg)
|
|
|
|
-- Push target onto node-stack
|
|
|
|
-- print(require("inspect").inspect(active_node))
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
callback("modem_message", addr, current_node, port, 0, msg)
|
|
|
|
-- print("Sending from "..current_node.." to "..addr..": "..msg)
|
|
|
|
-- Remove again
|
|
|
|
-- print(require("inspect").inspect(active_node))
|
|
|
|
active_node[#active_node] = nil
|
|
|
|
callback("modem_message", addr, current_node, port, 0, msg)
|
|
|
|
|
|
|
|
-- Remove again
|
|
|
|
|
|
|
|
active_node[#active_node] = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function network.broadcast(port, msg)
|
|
|
|
function network.broadcast(port, msg)
|
|
|
|
local current_node = active_node[#active_node]
|
|
|
|
local current_node = active_node[#active_node]
|
|
|
|
-- print("Broadcasting from "..current_node)
|
|
|
|
-- print("Broadcasting from "..current_node)
|
|
|
|
for addr in pairs(nodes) do
|
|
|
|
for addr in pairs(nodes) do
|
|
|
|
if addr ~= current_node then
|
|
|
|
if addr ~= current_node then
|
|
|
|
network.send(addr, port, msg)
|
|
|
|
network.send(addr, port, msg)
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function network.set_scene(addr)
|
|
|
|
function network.set_scene(addr)
|
|
|
|
active_node = {}
|
|
|
|
active_node = {}
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
table.insert(active_node, addr)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function network.get_scene(addr)
|
|
|
|
function network.get_scene(addr)
|
|
|
|
return active_node[#active_node]
|
|
|
|
return active_node[#active_node]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
return network
|
|
|
|
return network
|
|
|
|
|