Advertisement
shadowkat1010

mesh

Mar 30th, 2014
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. --Variables!
  2. local component = require "component"
  3. local event = require "event"
  4. local text = require "text"
  5. local shell = require "shell"
  6.  
  7. local modem = component.modem
  8. tape = component.tape_drive
  9.  
  10. local modemPower = 100
  11. local nodeAddr = "bang"
  12. local mailPath = "/usr/mail"
  13. local storedMessages = 0
  14.  
  15. --Functions!
  16.  
  17. local function tape_rezero()
  18. tape.seek(0-tape.getSize())
  19. end
  20.  
  21. local function extractAddr(path)
  22. if path:find("!") ~= nil then
  23. return path:sub(1,path:find("!")-1), path:sub(path:find("!")+1,path:len())
  24. else return path,path
  25. end
  26. end
  27.  
  28. local function store(path,message)
  29. tape.write(path:len())
  30. tape.write(path)
  31. tape.write(message:len())
  32. tape.write(message)
  33. storedMessages = storedMessages + 1
  34. --print("Message stored! Will be sent soon. Stored Messages: "..storedMessages)
  35. end
  36.  
  37. local function sks_send(path,message)
  38. local sendTo, contPath = extractAddr(path)
  39. modem.broadcast(42,sendTo,contPath,message)
  40. end
  41. --[[
  42. local function pushSignal(message)
  43. local fObj = io.open("/tmp/relay_recv","w")
  44. fObj:write(message)
  45. fObj:close()
  46. end
  47. ]]--
  48.  
  49. local function msgListener(_,_,from,port,_,toAddr,path,message)
  50. --print(from)
  51. if port == 42 and path ~= nodeAddr and toAddr == nodeAddr then
  52. store(path,message)
  53. elseif port == 42 and path == nodeAddr and toAddr == nodeAddr then
  54. print(from)
  55. print(port)
  56. print(message)
  57. computer.pushSignal("relay_message",message)
  58. os.sleep(0.1)
  59. --mailEventListener(message)
  60. elseif toAddr == "ayt" then --Ping
  61. os.sleep(math.random(1,10)+(math.random(1,10)/10))
  62. modem.broadcast(port,"ack",nodeAddr)
  63. elseif port == 42 and toAddr == nodeAddr and path == toAddr and message:sub(1,4) == "ping" then
  64. pingEvent(message)
  65. end
  66. end
  67.  
  68. --[[
  69. local function mailEventListener(message)
  70. local frag1, ufrag = extractAddr(message)
  71. print(message)
  72. print(frag1)
  73. print(ufrag)
  74. if message:sub(1,3) == "put" then --put!subject!content
  75. local subject, content = extractAddr(ufrag)
  76. print(subject)
  77. print(content)
  78. local path = mailPath..subject
  79. print(path)
  80. if fs.exists(path) then
  81. local fObj = io.open(path,"a")
  82. else
  83. local fObj = io.open(path,"w")
  84. end
  85. fObj:write(content)
  86. fObj:close()
  87. end
  88. end
  89. ]]--
  90. local function sendTimer()
  91. tape_rezero()
  92. --print "Send timer activated"
  93. --print("Stored messages: "..storedMessages)
  94. if storedMessages > 0 then
  95. repeat
  96. local path = tape.read(tape.read())
  97. --print(path)
  98. local message = tape.read(tape.read())
  99. --print(message)
  100. sks_send(path,message)
  101. --print("Sent!")
  102. storedMessages = storedMessages - 1
  103. --print("Stored messages: "..storedMessages)
  104. until storedMessages == 0
  105. --print "Messages sent!"
  106. else
  107. --print "No messages sent!"
  108. end
  109. tape_rezero()
  110. end
  111.  
  112. local function sendEventListener(_,path,message)
  113. store(path,message)
  114. end
  115.  
  116. local function setup()
  117. modem.open(42)
  118. modem.setStrength(100)
  119. event.listen("modem_message",msgListener)
  120. event.listen("relay_send",sendEventListener)
  121. event.timer(30,sendTimer,math.huge)
  122. end
  123.  
  124. mailEventListener("put!derp!derp")
  125. setup()
  126.  
  127. --I don't know why I sound so excited about variables and functions!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement