EnterYourName

StorageCombiner

Nov 4th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.05 KB | None | 0 0
  1. local channelAlloc = 2
  2. local channelsIn = {}
  3. local channelsCount = 0
  4. local channelOut = 5
  5. local nextChannel = 1000
  6.  
  7. local modem = peripheral.wrap("right")
  8. local channelTables = {}
  9.  
  10. for _,v in ipairs(channelsIn) do
  11.     modem.open(v)
  12.     channelTables[v] = {}
  13. end
  14. modem.open(channelAlloc)
  15.  
  16. function send(channel, table)
  17.     modem.transmit(channel,0,textutils.serialize(table))
  18. end
  19.  
  20. function deserialize(message)
  21.  
  22.     return textutils.unserialize(message)
  23.  
  24. end
  25.  
  26.  
  27. while true do
  28.  
  29.     local _, _, senderChannel,
  30.     replyChannel, message, _ = os.pullEvent("modem_message")
  31.  
  32.     term.clear()
  33.     term.setCursorPos(1,1)
  34.     print("Received event")
  35.     print("Message: "..(message or "nil"))
  36.     print("SenderChannel: "..(senderChannel or "nil"))
  37.     print("Replychannel: "..(replyChannel or "nil"))
  38.  
  39.     if senderChannel == channelAlloc then
  40.  
  41.         if channelsIn[message] ~= nil then
  42.  
  43.             local tosend = {["channel"]=channelsIn[message],["id"]=(message or "")}
  44.             send(replyChannel, tosend)
  45.  
  46.         else
  47.  
  48.             local tosend = {["channel"]=nextChannel,["id"]=(message or "")}
  49.             send(replyChannel, tosend)
  50.             channelsCount = channelsCount + 1
  51.             channelsIn[message] = nextChannel
  52.             modem.open(nextChannel)
  53.             nextChannel = nextChannel+1
  54.  
  55.         end
  56.  
  57.     else
  58.  
  59.         modem.transmit(replyChannel,0,"Ok")
  60.  
  61.         local table = deserialize(message)
  62.         channelTables[senderChannel] = table
  63.         local combined = {}
  64.  
  65.         for _,channel in pairs(channelsIn) do
  66.             if combined == {} then
  67.  
  68.                 combined = channelTables[channel]
  69.  
  70.             else
  71.                 for k,v in pairs(channelTables[channel]) do
  72.  
  73.                     if combined[k] ~= nil then
  74.  
  75.                         combined[k] = combined[k] + v
  76.  
  77.                     else
  78.  
  79.                         combined[k] = v
  80.  
  81.                     end
  82.  
  83.                 end
  84.             end
  85.         end
  86.  
  87.         send(channelOut, combined)
  88.  
  89.     end
  90.  
  91.     sleep(0.1)
  92.  
  93. end
Add Comment
Please, Sign In to add comment