Advertisement
klindley

storage

May 10th, 2023 (edited)
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.92 KB | None | 0 0
  1. -- Storage host
  2. local keepAlive = true
  3. local manager
  4.  
  5. function doHello()
  6.   print("Sending Hello")
  7.  
  8.   local message = {command="helo"}
  9.   rednet.broadcast(textutils.serialize(message))
  10. end
  11.  
  12. function doRegister(resource)
  13.   print(("Registering storage for %s"):format(resource))
  14.  
  15.   local message = {command = "storage", resource = resource}
  16.   rednet.send(manager, textutils.serialize(message))
  17. end
  18.  
  19. function handleCommunications()
  20.   local sender, message = rednet.receive()
  21.   print(("Received message from %d: %s"):format(sender, message))
  22.  
  23.   local actualMessage = textutils.unserialize(message)
  24.  
  25.   if actualMessage.command == "request" then
  26.     handleRequest(actualMessage.amount)
  27.   elseif actualMessage.command == "hello" then
  28.     handleHello(sender)
  29.   end
  30. end
  31.  
  32. function handleHello(sender)
  33.   print(("Received hello from %d"):format(sender))
  34.  
  35.   manager = sender
  36.   local message = {command = "ack"}
  37.   rednet.send(manager, textutils.serialize(message))
  38. end
  39.  
  40. function handleRequest(amount)
  41.   print(("Handle request for %d"):format(amount))
  42.  
  43.   for i = 1, amount-1, 1 do
  44.     redstone.setOutput("top", true)
  45.     os.sleep(0.2)
  46.     redstone.setOutput("top", false)
  47.   end
  48.  
  49.   local message = {command = "ack"}
  50.   rednet.send(manager, textutils.serialize(message))
  51. end
  52.  
  53. function handleTerminate()
  54.   local event, key, is_held = os.pullEvent("key")
  55.   if keys.getName(key) ~= "f12" then
  56.     return
  57.   end
  58.  
  59.   redstone.setOutput("top", false)
  60.  
  61.   local message = {command="bye"}
  62.   rednet.send(manager, textutils.serialize(message))
  63.   keepAlive = false
  64. end
  65.  
  66. function main(...)
  67.   resource = ...
  68.   if not resource then
  69.     print("Please specify a resource: storage cobblestone")
  70.     return
  71.   end
  72.  
  73.   peripheral.find("modem", rednet.open)
  74.  
  75.   doHello()
  76.   handleCommunications()
  77.   doRegister(resource)
  78.  
  79.   while keepAlive do
  80.     parallel.waitForAny(handleCommunications, handleTerminate)
  81.   end
  82. end
  83.  
  84. main(...)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement