diff --git a/mine/client.lua b/mine/client.lua index 2e1a66a..f5eafed 100644 --- a/mine/client.lua +++ b/mine/client.lua @@ -123,12 +123,9 @@ function grabOres() local status, block = turtle.inspect() if status and block["name"]:lower():find("ore") then ore = block["name"]:lower() - print("digging"..tostring(ore)) if turtlestate["ores"][ore] then - print("+1") turtlestate["ores"][ore] = turtlestate["ores"][ore] + 1 else - print("=1") turtlestate["ores"][ore] = 1 end turtle.dig() @@ -503,19 +500,25 @@ function enqueueForJob2() end turtle.turnLeft() rednet.open("bottom") + local retrying = false while true do - rednet.broadcast("gibjob", "jobs") - sender, message, proto = rednet.receive("newjob", 2) - if message then - job = tonumber(message) - return job + rednet.broadcast("syn") + server, message, proto = rednet.receive(2) -- ACK + if not message then + retrying = true else - if not retrying then - retrying = true - --print("No job received. I will keep retrying.") - --turtlestate["state"] = "Waiting for job... (retrying)" - updateState({ state = "Waiting for job... (retrying)" }) + rednet.send(server, "gibjob") + _, job, _ = rednet.receive() + if message then + return tonumber(job) + else + if not retrying then + retrying = true + --print("No job received. I will keep retrying.") + --turtlestate["state"] = "Waiting for job... (retrying)" + updateState({ state = "Waiting for job... (retrying)" }) + end end end end @@ -658,25 +661,27 @@ function reportDuty2() id = turtlestate["job"] fuelconsumed = startfuel - turtle.getFuelLevel() turtlestate["fuel"] = fuelconsumed - rednet.broadcast(tostring(id), "jobs") - sleep(0.6) - --print("Proto: Sending fuel status") - rednet.broadcast(tostring(fuelconsumed), "fuel") - while true do - --print("Proto: Awaiting thanks") - updateState({ state = "Waiting for thanks..." }) - sender, message, proto = rednet.receive("jobcomplete", 2) - if message == "thanks" then - break - else - sleep(1) - end - end + + rednet.broadcast("syn") + server, _, _ = rednet.receive() -- ACK + rednet.send(server, "report") + rednet.send(server, tostring(id)) + rednet.send(server, tostring(fuelconsumed)) + --while true do + -- updateState({ state = "Waiting for thanks..." }) + -- sender, message, proto = rednet.receive("jobcomplete", 2) + -- if message == "thanks" then + -- break + -- else + -- sleep(1) + -- end + --end for k, v in pairs(turtlestate["ores"]) do - print(k,v) + rednet.send(server, k) + rednet.send(server, v) end - exit() - --print("Proto: Received thanks") + rednet.broadcast("done", "ores") + server, _, _ = rednet.receive() -- thanks end function turtleAI2() diff --git a/mine/server.lua b/mine/server.lua index 08998b3..f90dad9 100644 --- a/mine/server.lua +++ b/mine/server.lua @@ -17,30 +17,58 @@ function getNextJob() end while true do - sender, message, proto = rednet.receive("jobs") + sender, message, proto = rednet.receive() if not message then sleep(0.6) else - --print("> raw: "..message) - if message == "gibjob" then - if rs.getInput("top") then - job = getNextJob() - rednet.broadcast(tostring(job), "newjob") - print("Found job request. Offering "..tostring(job)) + if message == "syn" then + receiver = sender + rednet.send(receiver, "ack") + _, message, _ = rednet.receive() + if message then + if message == "gibjob" then + if rs.getInput("top") then + job = getNextJob() + rednet.send(receiver, tostring(job)) + print("Found job request. Offering "..tostring(job)) + end + elseif message == "report" then + _, job, _ = rednet.receive() + thejob = tonumber(job) + _, fuel, _ = rednet.receive() + thefuel = tonumber(fuel) + while true do + _, ore, _ = rednet.receive() + if ore == "done" then + break + end + _, number, _ = rednet.receive() + --thenumber = tonumber(thenumber) + print(tostring(job)..": "..ore.." "..tostring(number).."x") + end + rednet.send(receiver, "thanks") + end end - else - -- numberic job is complete - completejob = tonumber(message) - fuelused = "??" - fuelsender, fuelmessage, fuelproto = rednet.receive("fuel") - if fuelmessage then - fuelused = fuelmessage - end - print("Job "..tostring(completejob).." was completed, "..fuelused.." fuel was used") - rednet.broadcast("thanks", "jobcomplete") - log = io.open("jobs.log","a") - log:write(tostring(completejob),"\n") - log:close() end + -- if message == "gibjob" then + -- if rs.getInput("top") then + -- job = getNextJob() + -- rednet.send(sender, tostring(job), "newjob") + -- print("Found job request. Offering "..tostring(job)) + -- end + -- else + -- -- numberic job is complete + -- completejob = tonumber(message) + -- fuelused = "??" + -- fuelsender, fuelmessage, fuelproto = rednet.receive("fuel") + -- if fuelmessage then + -- fuelused = fuelmessage + -- end + -- print("Job "..tostring(completejob).." was completed, "..fuelused.." fuel was used") + -- rednet.broadcast("thanks", "jobcomplete") + -- log = io.open("jobs.log","a") + -- log:write(tostring(completejob),"\n") + -- log:close() + -- end end end