Add message queueing and route handling improvements

This commit is contained in:
CadenCoaster
2025-10-18 23:12:07 -07:00
committed by GitHub
parent 02d28eb8c2
commit c23ecb31f6

View File

@@ -12,6 +12,16 @@ local function isInDMap(id)
return false return false
end end
local function is_in_table(table,value)
if table == nil then return false end
for _,v in pairs(table) do
if v == value then
return true
end
end
return false
end
local function queue_message(msg, target) local function queue_message(msg, target)
table.insert(message_queue,#message_queue+1, {msg,target}) table.insert(message_queue,#message_queue+1, {msg,target})
end end
@@ -76,10 +86,11 @@ else
error("No radio or modem peripheral found") error("No radio or modem peripheral found")
end end
disatncemap[os.computerID()] = {dist = 0, sender = os.computerID()} disatncemap[os.computerID()] = {dist = 0, sender = os.computerID()}
interactions.send({protocol="getroutes"}) queue_message({protocol="getroutes"})
interactions.send({protocol="route_erase",destination=os.getComputerID()}) interactions.send({protocol="route_erase",destination=os.getComputerID()})
interactions.send({protocol="route",destination=os.getComputerID(),distance=0}) queue_message({protocol="route",destination=os.getComputerID(),distance=0,visited={os.getComputerID()}})
local function recieve()
while true do while true do
local _, msg = interactions.receive() local _, msg = interactions.receive()
if msg.protocol == "route" then if msg.protocol == "route" then
@@ -90,8 +101,10 @@ while true do
queue_message(msg) queue_message(msg)
end end
elseif msg.protocol == "route_erase" then elseif msg.protocol == "route_erase" then
if disatncemap[msg.destination] ~= nil and msg.destination ~= os.getComputerID() then if disatncemap[msg.destination] ~= nil and msg.destination ~= os.getComputerID() and not is_in_table(msg.visited,os.getComputerID()) then
disatncemap[msg.destination] = nil disatncemap[msg.destination] = nil
if (not msg.visited) then msg.visited = {} end
msg.visited[#msg.visited+1] = os.getComputerID()
print("route to",msg.destination,"erased!") print("route to",msg.destination,"erased!")
queue_message(msg) queue_message(msg)
end end
@@ -128,8 +141,15 @@ while true do
queue_message({protocol="reroute"}) queue_message({protocol="reroute"})
end end
end end
local msg,target = dequeue_message() end
if msg then end
interactions.send(msg, target) local function send()
while true do
local msg,target = dequeue_message()
if msg then
interactions.send(msg, target)
end
sleep()
end end
end end
parallel.waitForAny(recieve,send)