Advertisement
drpepper240

Rednet Debugger

Oct 18th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.00 KB | None | 0 0
  1. --computercraft
  2. --rednet console interactive debugger by drPepper
  3.  
  4. -- "THE BEER-WARE LICENSE"
  5. -- drPepper@KOPROKUBACH wrote this file. As long as you retain this notice you
  6. -- can do whatever you want with this stuff. If we meet some day, in-game or IRL,
  7. -- and you think this stuff is worth it, you can give me a beer in return
  8.  
  9.  
  10. --resume table
  11. rt = {}
  12.  
  13. --modem
  14. rt.modemSide = "bottom"
  15. rt.channelSend = 211
  16. rt.channelReceive = 210
  17.  
  18. --pastebin entry for self-update
  19. rt.pastebin = "pbYLEtsC"
  20.  
  21. --assume modem messages are serialized tables
  22. rt.messagesTables = true
  23.  
  24.  
  25. function ReadResume()
  26.     if not fs.exists("resume.f") then
  27.         print("Trying to resume without resume file, aborting...")
  28.         return
  29.     end
  30.     local file = fs.open("resume.f","r")
  31.     local sT = file.readAll()
  32.     rt = textutils.unserialize(sT)
  33.     file.close()
  34.     return
  35. end
  36.  
  37. function WriteResume()
  38.     local file = fs.open("resume.f","w")
  39.     local sT = textutils.serialize(rt)
  40.     file.write(sT)
  41.     file.close()
  42.     return
  43. end
  44.  
  45. function openChannel(n)
  46.     modem.open(n)
  47.     while modem.isOpen(n)== false do
  48.         print("opening channel "..n.."...\n")
  49.         sleep(1)
  50.         modem.open(n)
  51.     end
  52. end
  53.  
  54. --operation
  55.  
  56. --check resume file and read from it
  57. if fs.exists("resume.f") then
  58.     --resuming
  59.     ReadResume()
  60. else
  61.     WriteResume()
  62. end
  63.  
  64.  
  65. --opening
  66. modem = peripheral.wrap(rt.modemSide)
  67. while modem==nil do
  68.     print("wrapping...\n")
  69.     sleep(1)
  70.     modem = peripheral.wrap(rt.modemSide)
  71. end
  72.  
  73. openChannel(rt.channelReceive)
  74. openChannel(111)
  75.  
  76. term.clear()
  77. print("Rednet Debugger by DrPepper")
  78. --main loop
  79. while true do
  80.     print("S - send string, L - listen, U - update, P - send packet")
  81.     local event, keycode = os.pullEvent("key")
  82.     if keycode == 31 then
  83.         --send string
  84.         print("Enter a string to send")
  85.         local message  = io.read()
  86.         modem.transmit(rt.channelSend, rt.channelReceive, message)
  87.        
  88.     elseif keycode == 38 then
  89.         --listen
  90.         print("Listening on channel "..rt.channelReceive.."\nX to stop")
  91.         local run = true
  92.         while run do
  93.             local event, p1, p2, p3, p4, p5 = os.pullEvent()
  94.             if event == "key" then
  95.                 if p1 == 45 then
  96.                     --X key pressed
  97.                     run = false
  98.                     break
  99.                 else
  100.                     print("X to stop listening")
  101.                 end
  102.             elseif event == "modem_message" then
  103.                 print(tostring(os.time()).." received on ch "..tostring(p2))
  104.                 if (rt.messagesTables == true) then
  105.                     local messageT = textutils.unserialize(p4)
  106.                     for key,value in pairs( messageT ) do
  107.                         print(tostring(key)..": "..tostring(value))
  108.                     end            
  109.                 else
  110.                     print(p4)
  111.                 end
  112.             end
  113.         end
  114.     elseif keycode == 22 then
  115.         --update
  116.         fs.delete("resume.f")
  117.         shell.run("rm", "startup")
  118.         shell.run("pastebin", "get "..rt.pastebin.." startup")
  119.         os.reboot()
  120.     elseif keycode == 25 then
  121.         local packetT =
  122.         {
  123.         target = "BROADCAST",
  124.         command = "PEXECUTE",
  125.         pCommand = "emitBeam",
  126.         pParams = "0, 0, 10",
  127.         delay = 3
  128.         }
  129.         print("sending on channel "..rt.channelSend)
  130.         modem.transmit(rt.channelSend, rt.channelReceive, textutils.serialize(packetT))
  131.     end
  132.    
  133.    
  134. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement