Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Variables!
- local component = require "component"
- local event = require "event"
- local text = require "text"
- local shell = require "shell"
- local modem = component.modem
- tape = component.tape_drive
- local modemPower = 100
- local nodeAddr = "bang"
- local mailPath = "/usr/mail"
- local storedMessages = 0
- --Functions!
- local function tape_rezero()
- tape.seek(0-tape.getSize())
- end
- local function extractAddr(path)
- if path:find("!") ~= nil then
- return path:sub(1,path:find("!")-1), path:sub(path:find("!")+1,path:len())
- else return path,path
- end
- end
- local function store(path,message)
- tape.write(path:len())
- tape.write(path)
- tape.write(message:len())
- tape.write(message)
- storedMessages = storedMessages + 1
- --print("Message stored! Will be sent soon. Stored Messages: "..storedMessages)
- end
- local function sks_send(path,message)
- local sendTo, contPath = extractAddr(path)
- modem.broadcast(42,sendTo,contPath,message)
- end
- --[[
- local function pushSignal(message)
- local fObj = io.open("/tmp/relay_recv","w")
- fObj:write(message)
- fObj:close()
- end
- ]]--
- local function msgListener(_,_,from,port,_,toAddr,path,message)
- --print(from)
- if port == 42 and path ~= nodeAddr and toAddr == nodeAddr then
- store(path,message)
- elseif port == 42 and path == nodeAddr and toAddr == nodeAddr then
- print(from)
- print(port)
- print(message)
- computer.pushSignal("relay_message",message)
- os.sleep(0.1)
- --mailEventListener(message)
- elseif toAddr == "ayt" then --Ping
- os.sleep(math.random(1,10)+(math.random(1,10)/10))
- modem.broadcast(port,"ack",nodeAddr)
- elseif port == 42 and toAddr == nodeAddr and path == toAddr and message:sub(1,4) == "ping" then
- pingEvent(message)
- end
- end
- --[[
- local function mailEventListener(message)
- local frag1, ufrag = extractAddr(message)
- print(message)
- print(frag1)
- print(ufrag)
- if message:sub(1,3) == "put" then --put!subject!content
- local subject, content = extractAddr(ufrag)
- print(subject)
- print(content)
- local path = mailPath..subject
- print(path)
- if fs.exists(path) then
- local fObj = io.open(path,"a")
- else
- local fObj = io.open(path,"w")
- end
- fObj:write(content)
- fObj:close()
- end
- end
- ]]--
- local function sendTimer()
- tape_rezero()
- --print "Send timer activated"
- --print("Stored messages: "..storedMessages)
- if storedMessages > 0 then
- repeat
- local path = tape.read(tape.read())
- --print(path)
- local message = tape.read(tape.read())
- --print(message)
- sks_send(path,message)
- --print("Sent!")
- storedMessages = storedMessages - 1
- --print("Stored messages: "..storedMessages)
- until storedMessages == 0
- --print "Messages sent!"
- else
- --print "No messages sent!"
- end
- tape_rezero()
- end
- local function sendEventListener(_,path,message)
- store(path,message)
- end
- local function setup()
- modem.open(42)
- modem.setStrength(100)
- event.listen("modem_message",msgListener)
- event.listen("relay_send",sendEventListener)
- event.timer(30,sendTimer,math.huge)
- end
- mailEventListener("put!derp!derp")
- setup()
- --I don't know why I sound so excited about variables and functions!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement