Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --<<The program for the control of the drone network, ComputerCraft>>--
- --<<PC Control, Lua>>--
- --By Aleksandr Kulikov, 2013--
- -- http://pastebin.com/R8xtbPTk --
- -- pastebin get R8xtbPTk pc_control --
- local ver_prog = "0.8.2"
- local xMax, yMax = term.getSize()
- local decor_line = string.rep("-", xMax)
- local id_sender = 555
- --*********************************************************************************
- local function clearScreen()
- term.clear()
- term.setCursorPos(1,1)
- end
- --*********************************************************************************
- local function autorunStartUp()
- if not os.getComputerLabel() then
- os.setComputerLabel("PC control - "..os.getComputerID())
- end
- if fs.exists("startup") then
- if not fs.exists("startup_backup") then
- fs.copy("startup","startup_backup")
- end
- end
- local file = fs.open ("startup", "w")
- file.writeLine ("--Edit the file to execute the program: <"..shell.getRunningProgram()..">")
- file.writeLine ("--A backup copy of the file: <startup_backup>")
- file.writeLine ("shell.run(\""..shell.getRunningProgram().."\")")
- file.close()
- end
- --*********************************************************************************
- local function PrintCenter(str)
- local xPos, yPos = term.getCursorPos()
- str_long = #str
- term.setCursorPos(xMax/2-str_long/2,yPos)
- term.write(str)
- end
- --*********************************************
- local function WriteCenter(str)
- local xPos, yPos = term.getCursorPos()
- str_long = #str
- term.setCursorPos((xMax/2-str_long/2)+1,yPos)
- term.write(str)
- end
- --****************************************************************************
- local function RedNetOpen()
- local sModemSide = nil
- for n,sSide in ipairs( rs.getSides() ) do
- if peripheral.getType( sSide ) == "modem" then
- sModemSide = sSide
- rednet.open(sModemSide)
- gps_x, gps_z, gps_y = gps.locate(1)
- if gps_x == nil then
- GPS_signal = "No"
- else
- GPS_signal = "Yes"
- end
- break
- end
- end
- if sModemSide == nil then
- print("ID computer: "..os.getComputerID())
- print("Program stopped.")
- print("No modem attached.")
- error()
- end
- end
- --*********************************************************************************
- local function RedNetClose()
- local sModemSide = nil
- for n,sSide in ipairs( rs.getSides() ) do
- if peripheral.getType( sSide ) == "modem" then
- sModemSide = sSide
- rednet.close(sModemSide)
- break
- end
- end
- if sModemSide == nil then
- print( "Program stopped." )
- print( "No modem attached." )
- error()
- end
- end
- --*********************************************************************************
- local function ChangeEnterIDserver()
- write("Enter ID sender: ")
- id_sender = math.floor(math.abs(tonumber(io.read()) or id_sender))
- local file = fs.open ("id_sender_set.dat", "w")
- file.writeLine (id_sender)
- file.writeLine ("--The server accepts messages only from this ID.")
- file.close()
- end
- --*********************************************************************************
- local function ReadIDsender()
- if fs.exists("id_sender_set.dat") then
- local file = fs.open ("id_sender_set.dat", "r")
- id_sender = tonumber (file.readLine ( ))
- file.close ( )
- end
- end
- --*********************************************************************************
- local function UpdateThisProg()
- local Code = "R8xtbPTk"
- local File_name = shell.getRunningProgram() --..os.day()
- clearScreen()
- if not http then
- print("Pastebin requires http API!!!")
- print("Set enable API_http in ComputerCraft.cfg")
- sleep(5)
- return
- end
- print("Connecting to pastebin.com... ")
- local response = http.get(
- "http://pastebin.com/raw.php?i="..textutils.urlEncode(Code)
- )
- if response then
- print("Success.")
- local sResponse = response.readAll()
- response.close()
- local file = fs.open(File_name, "w")
- file.write( sResponse )
- file.close()
- print("Downloaded as "..File_name)
- sleep(1)
- for i = 1, 6 do
- clearScreen()
- print("Reboot system "..(6-i).." sec...")
- sleep(1)
- end
- os.reboot()
- else
- print("Failed." )
- end
- sleep(5)
- end
- --*********************************************************************************
- local function Header()
- clearScreen()
- PrintCenter("Server ID: "..os.getComputerID()..", Sender ID: "..id_sender..", ver. "..ver_prog)
- term.setCursorPos(1,2)
- PrintCenter("[Q]-exit, [I]-id sender change, [U]-updata, DPI: "..xMax.."x"..yMax)
- term.setCursorPos(1,3)
- term.write(decor_line)
- term.setCursorPos(1,yMax-1)
- term.write(decor_line)
- term.setCursorPos(1,yMax)
- term.clearLine()
- term.write("Distance to sender: ")
- term.setCursorPos(xMax-9,yMax)
- term.write("[GPS: "..GPS_signal.."]")
- term.setCursorPos(1,4)
- end
- local function ProgExit()
- clearScreen()
- print("Server OFF! ID: "..os.getComputerID())
- print("Press CTRL+R to restart")
- RedNetClose()
- end
- --*********************************************************************************
- autorunStartUp()
- clearScreen()
- RedNetOpen()
- ReadIDsender()
- Header()
- while true do
- xPos, yPos = term.getCursorPos()
- local e, p1, p2, p3, p4, p5 = os.pullEvent()
- local sender, msg, distance = p3, p4, p5
- if e == "modem_message" then
- if sender == id_sender then -- receiving messages from a particular sender ID
- if msg ~= "new_data_packet" and msg ~= "line" and msg ~= "clear_mon" then
- term.clearLine()
- term.write(msg)
- term.setCursorPos(1,yPos+1)
- xPos, yPos = term.getCursorPos()
- term.setCursorPos(1,yMax)
- term.clearLine()
- term.write("Distance to sender: "..math.floor(distance).." meters.")
- term.setCursorPos(xMax-9,yMax)
- term.write("[GPS: "..GPS_signal.."]")
- term.setCursorPos(xPos, yPos)
- end
- if msg == "new_data_packet" then
- term.setCursorPos(1,4)
- end
- if msg == "line" then
- term.write(decor_line)
- xPos, yPos = term.getCursorPos()
- term.setCursorPos(1,yPos+1)
- end
- if msg == "clear_mon" then
- Header()
- end
- end
- elseif e == "key" then
- local key = p1
- if key == keys.i then
- clearScreen()
- os.pullEvent("char")
- ChangeEnterIDserver()
- Header()
- elseif key == keys.u then
- os.pullEvent("char")
- UpdateThisProg()
- elseif key == keys.q then
- os.pullEvent("char")
- ProgExit()
- break
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement