Advertisement
Alex1979

control_pc

Aug 11th, 2013
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.62 KB | None | 0 0
  1. --<<The program for the control of the drone network, ComputerCraft>>--
  2.                 --<<PC Control, Lua>>--
  3.               --By Aleksandr Kulikov, 2013--
  4.              -- http://pastebin.com/R8xtbPTk --
  5.                -- pastebin get R8xtbPTk pc_control --
  6.                
  7. local ver_prog = "0.8.2"
  8. local xMax, yMax = term.getSize()
  9. local decor_line = string.rep("-", xMax)
  10. local id_sender = 555
  11.  
  12.  
  13. --*********************************************************************************
  14. local function clearScreen()
  15.     term.clear()
  16.     term.setCursorPos(1,1)
  17. end
  18. --*********************************************************************************
  19. local function autorunStartUp()
  20.        
  21.         if not os.getComputerLabel() then
  22.             os.setComputerLabel("PC control - "..os.getComputerID())
  23.         end
  24.        
  25.         if  fs.exists("startup") then
  26.               if not fs.exists("startup_backup") then
  27.                 fs.copy("startup","startup_backup")
  28.               end
  29.         end        
  30.         local file = fs.open ("startup", "w")
  31.         file.writeLine ("--Edit the file to execute the program: <"..shell.getRunningProgram()..">")
  32.         file.writeLine ("--A backup copy of the file: <startup_backup>")
  33.         file.writeLine ("shell.run(\""..shell.getRunningProgram().."\")")
  34.         file.close()
  35. end
  36. --*********************************************************************************
  37. local function PrintCenter(str)
  38.         local xPos, yPos = term.getCursorPos()
  39.         str_long = #str
  40.         term.setCursorPos(xMax/2-str_long/2,yPos)
  41.         term.write(str)
  42. end
  43. --*********************************************
  44. local function WriteCenter(str)
  45.         local xPos, yPos = term.getCursorPos()
  46.         str_long = #str
  47.         term.setCursorPos((xMax/2-str_long/2)+1,yPos)
  48.         term.write(str)
  49. end
  50.  
  51. --****************************************************************************
  52. local function RedNetOpen()
  53.     local sModemSide = nil
  54.         for n,sSide in ipairs( rs.getSides() ) do
  55.             if peripheral.getType( sSide ) == "modem" then 
  56.                 sModemSide = sSide
  57.                 rednet.open(sModemSide)
  58.                 gps_x, gps_z, gps_y = gps.locate(1)
  59.                     if gps_x == nil then
  60.                         GPS_signal = "No"
  61.                     else
  62.                         GPS_signal = "Yes"
  63.                     end
  64.                 break
  65.             end
  66.         end
  67.  
  68.         if sModemSide == nil then
  69.             print("ID computer: "..os.getComputerID())
  70.             print("Program stopped.")
  71.             print("No modem attached.")
  72.             error()
  73.     end
  74. end
  75. --*********************************************************************************
  76. local function RedNetClose()
  77.     local sModemSide = nil
  78.         for n,sSide in ipairs( rs.getSides() ) do
  79.             if peripheral.getType( sSide ) == "modem" then 
  80.                 sModemSide = sSide
  81.                 rednet.close(sModemSide)
  82.                 break
  83.             end
  84.         end
  85.  
  86.         if sModemSide == nil then
  87.             print( "Program stopped." )
  88.             print( "No modem attached." )
  89.             error()
  90.     end
  91. end
  92.  
  93. --*********************************************************************************
  94. local function ChangeEnterIDserver()
  95.     write("Enter ID sender: ")
  96.     id_sender = math.floor(math.abs(tonumber(io.read()) or id_sender))
  97.     local file = fs.open ("id_sender_set.dat", "w")
  98.         file.writeLine (id_sender)
  99.         file.writeLine ("--The server accepts messages only from this ID.")
  100.     file.close()
  101. end
  102. --*********************************************************************************
  103. local function ReadIDsender()
  104.     if  fs.exists("id_sender_set.dat") then    
  105.         local file = fs.open ("id_sender_set.dat", "r")
  106.         id_sender = tonumber (file.readLine ( ))
  107.         file.close ( )
  108.     end
  109. end
  110. --*********************************************************************************
  111. local function UpdateThisProg()
  112.     local Code = "R8xtbPTk"
  113.     local File_name = shell.getRunningProgram() --..os.day()
  114.    
  115.     clearScreen()
  116.     if not http then
  117.         print("Pastebin requires http API!!!")
  118.         print("Set enable API_http in ComputerCraft.cfg")
  119.         sleep(5)
  120.         return
  121.     end
  122.    
  123.     print("Connecting to pastebin.com... ")
  124.     local response = http.get(
  125.         "http://pastebin.com/raw.php?i="..textutils.urlEncode(Code)
  126.         )
  127.        
  128.     if response then
  129.         print("Success.")
  130.        
  131.         local sResponse = response.readAll()
  132.         response.close()
  133.        
  134.         local file = fs.open(File_name, "w")
  135.         file.write( sResponse )
  136.         file.close()
  137.        
  138.         print("Downloaded as "..File_name)
  139.         sleep(1)
  140.             for i = 1, 6 do
  141.             clearScreen()
  142.                 print("Reboot system "..(6-i).." sec...")
  143.                 sleep(1)
  144.             end
  145.         os.reboot()
  146.     else
  147.         print("Failed." )
  148.     end
  149.     sleep(5)
  150. end
  151.  
  152.  
  153. --*********************************************************************************
  154. local function Header()
  155.     clearScreen()
  156.     PrintCenter("Server ID: "..os.getComputerID()..", Sender ID: "..id_sender..", ver. "..ver_prog)
  157.     term.setCursorPos(1,2)
  158.     PrintCenter("[Q]-exit, [I]-id sender change, [U]-updata, DPI: "..xMax.."x"..yMax)
  159.     term.setCursorPos(1,3)
  160.     term.write(decor_line)
  161.     term.setCursorPos(1,yMax-1)
  162.     term.write(decor_line)
  163.     term.setCursorPos(1,yMax)
  164.     term.clearLine()
  165.     term.write("Distance to sender: ")
  166.     term.setCursorPos(xMax-9,yMax)
  167.     term.write("[GPS: "..GPS_signal.."]")
  168.     term.setCursorPos(1,4)
  169.    
  170. end
  171. local function ProgExit()
  172.         clearScreen()
  173.         print("Server OFF! ID: "..os.getComputerID())
  174.         print("Press CTRL+R to restart")
  175.         RedNetClose()
  176. end
  177.  
  178.  
  179.  
  180. --*********************************************************************************
  181. autorunStartUp()
  182. clearScreen()
  183. RedNetOpen()
  184. ReadIDsender() 
  185. Header()
  186.  
  187.     while  true do     
  188.         xPos, yPos = term.getCursorPos()
  189.         local e, p1, p2, p3, p4, p5 = os.pullEvent()
  190.         local sender, msg, distance = p3, p4, p5
  191.         if e == "modem_message" then
  192.                     if sender == id_sender then -- receiving messages from a particular sender ID
  193.                    
  194.                         if msg ~= "new_data_packet" and msg ~= "line"  and msg ~= "clear_mon" then
  195.                             term.clearLine()
  196.                             term.write(msg)
  197.                             term.setCursorPos(1,yPos+1)
  198.                             xPos, yPos = term.getCursorPos()
  199.                             term.setCursorPos(1,yMax)
  200.                             term.clearLine()
  201.                             term.write("Distance to sender: "..math.floor(distance).." meters.")
  202.                             term.setCursorPos(xMax-9,yMax)
  203.                             term.write("[GPS: "..GPS_signal.."]")
  204.                             term.setCursorPos(xPos, yPos)
  205.                         end
  206.                        
  207.                             if msg == "new_data_packet" then
  208.                                 term.setCursorPos(1,4)
  209.                             end
  210.                         if msg == "line" then
  211.                             term.write(decor_line)
  212.                             xPos, yPos = term.getCursorPos()
  213.                             term.setCursorPos(1,yPos+1)
  214.                         end
  215.                        
  216.                         if msg == "clear_mon" then
  217.                             Header()
  218.                         end
  219.                     end
  220.         elseif e == "key" then
  221.             local key = p1
  222.             if key == keys.i then
  223.                 clearScreen()
  224.                 os.pullEvent("char")
  225.                 ChangeEnterIDserver()
  226.                 Header()
  227.             elseif key == keys.u then
  228.                 os.pullEvent("char")
  229.                 UpdateThisProg()   
  230.             elseif key == keys.q then
  231.                 os.pullEvent("char")
  232.                 ProgExit()
  233.                 break
  234.             end
  235.         end
  236.     end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement