From 1f593d05422392dbd46df6dc4b8f567f37bf3ea5 Mon Sep 17 00:00:00 2001 From: Jacob Babor Date: Mon, 26 Feb 2024 01:03:04 -0600 Subject: [PATCH] Add some specs idk it doesn't matter i just found out that a wired net does this a million times better lol --- storage-net/README.md | 4 ++++ storage-net/common.lua | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/storage-net/README.md b/storage-net/README.md index a114348..107bf1b 100644 --- a/storage-net/README.md +++ b/storage-net/README.md @@ -36,6 +36,9 @@ Packet format is uniform between master <-> slaves and is structured like so: itemquant: int() destination: int() location: [int(),int(),int()] + + // Dump for additional body data + body: any } ``` @@ -49,6 +52,7 @@ Packet format is uniform between master <-> slaves and is structured like so: | `itemname` | false | string | The unlocalized name of an item. Used for querying, crafting, movement, etc. | | `itemquant` | false | int | Quantity of the aforementioned item | | `destination` | false | int | The CC ID of the intended recipient of the item | +| `body` | false | any | Any additional body data per the requirements of a query, such as a detailed list of inventory contents | ### Slave Node Initialization diff --git a/storage-net/common.lua b/storage-net/common.lua index bd0a4b7..35fd47b 100644 --- a/storage-net/common.lua +++ b/storage-net/common.lua @@ -24,6 +24,7 @@ modem_side = peripheral.getName(modem) -- Master globals m_slaves = {} -- Slave globals +s_chest = peripheral.wrap("top") or nil -- Common functions function c_mainLoop(loopfunc) @@ -33,7 +34,7 @@ function c_mainLoop(loopfunc) end end function c_waitForMessage() - -- Waits for a message on the modem, timing out after 1 second + -- Waits for a message on the modem, timing out after some duration local sender, message = rednet.receive(packet_magic, 1) if message then if @@ -74,7 +75,9 @@ function m_loop() if msg["type"] == "pong" then local source = msg["sourceid"] print("Received pong from slave: " .. source) - m_slaves[source] = source + if (not m_slaves[source]) then + m_slaves[source] = {} + end end end function m_ping() @@ -97,9 +100,21 @@ function s_loop() -- Respond to pings with pongs print("Received ping from master: " .. msg["sourceid"]) c_sendMessage({type="pong"}) + elseif (msg["type"] == "query") then + -- Analyze the attached inventory and see if we have the item else print("Unknown message: " .. textutils.serialize(msg)) end + -- If we have any items, we should stow them away. Put them in our chest if + -- we can fit it, otherwise pass it along + for i=1,16 do + turtle.select(i) + while turtle.getItemCount(i) > 0 do + -- We have items in this slot -- push up until we can't anymore + if not turtle.dropUp() then break end + end + if turtle.getItemCount(i) > 0 then turtle.drop() end + end end -- Application entrypoint @@ -116,6 +131,9 @@ function main () elseif (mode == "slave") then print("Beginning initialization as slave...") rednet.open(modem_side) + if not s_chest then + error("No connected inventory. Place one above this node.", 0) + end print("Entering main loop") c_mainLoop(s_loop)