Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BetterRN = {
- side = "top"
- }
- function BetterRN:new()
- setmetatable({}, BetterRN)
- self.side = self:findModem()
- self:open()
- return self
- end
- function BetterRN:findModem()
- local sides = {"top", "bottom", "left", "right", "front", "back"}
- for i = 1, #sides do
- if peripheral.getType(sides[i]) == "modem" then
- return sides[i]
- end
- end
- return false
- end
- function BetterRN:open()
- if not self.side then
- self.side = self:findModem()
- if not self.side then
- error("No modem connected")
- end
- end
- rednet.open(self.side)
- end
- function BetterRN:listen(channel)
- local rawResponse = {}
- while true do
- if channel then
- rawResponse = {rednet.receive(channel, 10)}
- else
- rawResponse = {rednet.receive(10)}
- end
- if next(rawResponse) ~= nil then
- return rawResponse
- end
- end
- end
- function BetterRN:send(id, message, channel, times)
- times = times or 6
- local response
- if channel then
- for i = 1, times do
- rednet.send(id, message, channel)
- response = self:listen(channel)
- if response and response[1] == id and (response[2] == true or response[2]:lower() == "true" or response[2]:lower() == "ok" or response[2] == 1) then
- break
- end
- end
- else
- for i = 1, times do
- rednet.send(id, message)
- response = self:listen()
- if response and response[1] == id and (response[2] == true or response[2]:lower() == "true" or response[2]:lower() == "ok" or response[2] == 1)then
- break
- end
- end
- end
- end
- function BetterRN:broadcast(message, channel, times)
- local times = times or 1
- local message = message
- local channel = channel
- if channel then
- for i = 1,times do
- rednet.broadcast(message, channel)
- sleep(1)
- end
- else
- for i = 1,times do
- rednet.broadcast(message)
- sleep(1)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment