Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Hot Pocket Repeater
- SECONDS_UNTIL_PACKET_CLEARED = 10
- -- Open network interface
- rednet.open("top")
- -- Packet table
- -- This is to make sure we only repeat a packet once
- repeated_packets = {}
- memory_size = 0
- repeated = 0
- dropped = 0
- function draw_screen()
- -- Clear Screen
- term.clear()
- term.setCursorPos(1, 1)
- print("HotPocketProtocol Repeater v1.1")
- print("-------------------------------")
- print("Memory Usage: " .. memory_size)
- print("Repeated Packets: " .. repeated)
- print("Dropped Packets: " .. dropped)
- end
- function memory_tick()
- memory_size = 0
- local k = next(repeated_packets)
- while k do
- memory_size = memory_size + 1
- n = next(repeated_packets, k)
- if repeated_packets[k] <= 0 then -- Packet is done being timed out
- repeated_packets[k] = nil -- Clear packet
- else -- Packet is not done being timed out
- repeated_packets[k] = repeated_packets[k] - 1 -- Decrement counter
- end
- if k ~= n then
- k = n
- else
- k = nil
- end
- end
- end
- while true do
- memory_tick()
- draw_screen()
- -- Listen for packets
- computer_id, info, protocol = rednet.receive("HotPocketProtocol", 1)
- if computer_id ~= nil then -- If a packet is received
- -- Unpack packet
- data = {}
- for i in string.gmatch(info, "%S+") do
- table.insert(data, i)
- end
- packet = data[1] .. tonumber(data[2])
- -- Make sure packet hasn't been repeated
- if repeated_packets[packet] == nil then
- repeated_packets[packet] = SECONDS_UNTIL_PACKET_CLEARED;
- rednet.broadcast(info, "HotPocketProtocol")
- repeated = repeated + 1
- else
- dropped = dropped + 1
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement