Advertisement
1lann

stargate

Jun 22nd, 2013
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 19.85 KB | None | 0 0
  1. os.pullEvent = os.pullEventRaw
  2. -- By: 1lann. Written in five to six hours
  3.  
  4. --local stargate = peripheral.wrap("stargate_base_1")
  5. local stargate = peripheral.wrap("back")
  6. local glass = peripheral.wrap("bottom")
  7.  
  8. if not fs.exists("/stargatedata") then
  9.     local f = io.open("/stargatedata", "w")
  10.     local save = {{["password"]="trains",["timeout"]=0,["autoreject"]=true}, {}, {}}
  11.     f:write(textutils.serialize(save))
  12.     f:close()
  13. end
  14.  
  15. local unknowns = {}
  16. local addresses = {}
  17. local config = {}
  18. local skipPrint = false
  19. local startingTime = nil
  20. local logs = {}
  21. local readerColor = colors.red
  22. local glassLines = {}
  23. local previousConnection = nil
  24. local readerTimer = nil
  25.  
  26. local gColors = {}
  27. gColors.red = 0xff3333
  28. gColors.blue = 0x7dd2e4
  29. gColors.yellow = 0xffff4d
  30. gColors.green = 0x4dff4d
  31. gColors.gray = 0xe0e0e0
  32. gColors.textGray = 0x818181
  33. gColors.text = 0x5a5a5a
  34. gColors.rain = 0x2e679f
  35.  
  36. local function loadEverything()
  37.     local f = io.open("/stargatedata", "r")
  38.     local everything = textutils.unserialize(f:read("*a"))
  39.     f:close()
  40.     config = everything[1]
  41.     unknowns = everything[2]
  42.     addresses = everything[3]
  43. end
  44.  
  45. local function saveEverything()
  46.     local everything = {config, unknowns, addresses}
  47.     local f = io.open("/stargatedata", "w")
  48.     f:write(textutils.serialize(everything))
  49.     f:close()
  50. end
  51.  
  52. local function readTimeout(e, p1)
  53.     if (e == "timer") and (p1 == readerTimer) then
  54.         return true
  55.     end
  56. end
  57.  
  58. local function reader(replaceChar, handler)
  59.     local posX, posY = term.getCursorPos()
  60.     local length = term.getSize()
  61.     local max = posX + length
  62.     local min = posX
  63.     local hScroll = 1
  64.     local textPos = 1
  65.     local data = curData
  66.     if not data then data = "" else textPos = data:len()+1 end
  67.     local previousFull = false
  68.     while true do
  69.         term.setCursorBlink(true)
  70.         term.setCursorPos(posX, posY)
  71.         term.write(string.rep(" ", length))
  72.         term.setCursorPos(posX, posY)
  73.         if not replaceChar then
  74.             term.write(data:sub(hScroll, hScroll+length-1))
  75.         else
  76.             term.write(string.rep("*",#(data:sub(hScroll, hScroll+length-1))))
  77.         end
  78.         --logScreen("textPos: " .. textPos .. " hScroll: " .. hScroll .. " Relationship: " .. length-(textPos-hScroll)+1 .. "\n" .. data)
  79.         term.setCursorPos(posX+textPos-hScroll, posY)
  80.         local e, p1, p2, p3, p4, p5 = os.pullEvent()
  81.         if handler then
  82.             local handleResponse, h1 = handler(e, p1, p2, p3, p4, p5)
  83.             if handleResponse then return "handler", h1, data, e, p1, p2, p3, p4, p5 end
  84.         end
  85.         if (e == "char") then
  86.             if term.getCursorPos() >= posX+length-1 then
  87.                 hScroll=hScroll+1
  88.                 if true then
  89.                     data = data:sub(1, textPos-1) .. p1 .. data:sub(textPos, -1)
  90.                 else
  91.                     textPos = textPos1
  92.                     data = data:sub(1, textPos-1) .. p1 .. data:sub(textPos, -1)
  93.                 end
  94.                 textPos = textPos+1
  95.                 previousFull = true
  96.             else
  97.                 previousFull = false
  98.                 data = data:sub(1, textPos-1) .. p1 .. data:sub(textPos, -1)
  99.                 textPos = textPos+1
  100.             end
  101.         elseif (e == "key") then
  102.             if p1 == 28 then
  103.                 term.setCursorBlink(false)
  104.                 return "enter", data
  105.             elseif p1 == 203 then
  106.                 if textPos > 1 then
  107.                     textPos = textPos-1
  108.                     if textPos <= hScroll then
  109.                         if hScroll > 1 then
  110.                             hScroll = hScroll-((hScroll-textPos)+1)
  111.                         end
  112.                     end
  113.                 end
  114.             elseif p1 == 205 then
  115.                 if textPos <= data:len() then
  116.                     textPos = textPos+1
  117.                     if 1 >= length-(textPos-hScroll)+1 then
  118.                         hScroll = hScroll+1
  119.                     end
  120.                 end
  121.             elseif p1 == 14 then
  122.                 if textPos > 1 then
  123.                     data = data:sub(1, textPos-2) .. data:sub(textPos, -1)
  124.                     textPos = textPos-1
  125.                     if textPos <= hScroll then
  126.                         if hScroll > 1 then
  127.                             hScroll = hScroll-((hScroll-textPos)+1)
  128.                         end
  129.                     end
  130.                 end
  131.             end
  132.         end
  133.     end
  134. end
  135.  
  136. local function trimText(s)
  137.     if s then
  138.         return s:match("^%s*(.-)%s*$")
  139.     else
  140.         return nil
  141.     end
  142. end
  143.  
  144. local function isAddressRecorded(address)
  145.     if address == "" then return true end
  146.     local address = trimText(address):upper()
  147.     for k,v in pairs(unknowns) do
  148.         if v == address then
  149.             return true
  150.         end
  151.     end
  152.     for k,v in pairs(addresses) do
  153.         if v == address then
  154.             return true
  155.         end
  156.     end
  157. end
  158.  
  159. local function isInAddressbook(address)
  160.     local address = trimText(address):upper()
  161.     for k,v in pairs(addresses) do
  162.         if v == address then
  163.             return true, k
  164.         elseif k:upper() == address then
  165.             return true, v
  166.         end
  167.     end
  168. end
  169.  
  170. local function getID(address)
  171.     local address = trimText(address):upper()
  172.     for k,v in pairs(addresses) do
  173.         if v == address then
  174.             return k
  175.         end
  176.     end
  177.     return false
  178. end
  179.  
  180. local function getAddress(id)
  181.     local id = trimText(id):lower()
  182.     for k,v in pairs(addresses) do
  183.         if k == id then
  184.             return v
  185.         end
  186.     end
  187.     return false
  188. end
  189.  
  190. local function autofill(address)
  191.     if getID(address) or getAddress(address) then
  192.         return address
  193.     end
  194.     if address:upper() == address then
  195.         for k,v in pairs(addresses) do
  196.             if v:sub(1,#address):lower() == address then
  197.                 return v
  198.             end
  199.         end
  200.         for k,v in pairs(unknowns) do
  201.             if v:sub(1,#address):lower() == address then
  202.                 return v
  203.             end
  204.         end
  205.     else
  206.         local address = address:lower()
  207.         for k,v in pairs(addresses) do
  208.             if k:sub(1,#address) == address then
  209.                 return k
  210.             end
  211.         end
  212.         for k,v in pairs(addresses) do
  213.             if k:find(address) then
  214.                 return k
  215.             end
  216.         end
  217.         for k,v in pairs(addresses) do
  218.             if v:sub(1,#address):lower() == address then
  219.                 return v
  220.             end
  221.         end
  222.         for k,v in pairs(unknowns) do
  223.             if v:sub(1,#address):lower() == address then
  224.                 return v
  225.             end
  226.         end
  227.     end
  228.  
  229.     return false
  230. end
  231.  
  232. local function autofillUnknown(address)
  233.     local address = trimText(address):upper()
  234.     for k,v in pairs(unknowns) do
  235.         if v:sub(1,#address) == address then
  236.             return v
  237.         end
  238.     end
  239.     return false
  240. end
  241. local width, height = term.getSize()
  242.  
  243. local function push(data, color)
  244.     local oldX, oldY = term.getCursorPos()
  245.     logs[#logs+1] = {data, color}
  246.     for i = 1, height-2 do
  247.         term.setCursorPos(1, i)
  248.         term.clearLine()
  249.     end
  250.     if #logs-(height-3) > 0 then
  251.         term.setCursorPos(1, 1)
  252.         for i = #logs-(height-3), #logs do
  253.             term.setTextColor(logs[i][2])
  254.             term.write(logs[i][1])
  255.             print("")
  256.         end
  257.     else
  258.         term.setCursorPos(1, height-1-#logs)
  259.         for i = 1, #logs do
  260.             term.setTextColor(logs[i][2])
  261.             term.write(logs[i][1])
  262.             print("")
  263.         end
  264.     end
  265.     term.setTextColor(readerColor)
  266.     term.setCursorPos(oldX, oldY)
  267.     if glass then
  268.         for i = 1, 10 do
  269.             glassLines[i].setText("")
  270.         end
  271.         if #logs > 9 then
  272.             for i = #logs, #logs-9, -1 do
  273.                 local setCol = nil
  274.                 if logs[i][2] == colors.red then
  275.                     setCol = gColors.red
  276.                 elseif logs[i][2] == colors.lightBlue then
  277.                     setCol = gColors.blue
  278.                 elseif logs[i][2] == colors.white then
  279.                     setCol = gColors.text
  280.                 elseif logs[i][2] == colors.yellow then
  281.                     setCol = gColors.yellow
  282.                 else
  283.                     setCol = 0
  284.                 end
  285.                 glassLines[(#logs-i)+1].setColor(setCol)
  286.                 glassLines[(#logs-i)+1].setText(logs[i][1])
  287.             end
  288.         else
  289.             for i = #logs, 1, -1 do
  290.                 local setCol = nil
  291.                 if logs[i][2] == colors.red then
  292.                     setCol = gColors.red
  293.                 elseif logs[i][2] == colors.lightBlue then
  294.                     setCol = gColors.blue
  295.                 elseif logs[i][2] == colors.white then
  296.                     setCol = gColors.text
  297.                 elseif logs[i][2] == colors.yellow then
  298.                     setCol = gColors.yellow
  299.                 else
  300.                     setCol = 0
  301.                 end
  302.                 glassLines[(#logs-i)+1].setColor(setCol)
  303.                 glassLines[(#logs-i)+1].setText(logs[i][1])
  304.             end
  305.         end
  306.     end
  307. end
  308.  
  309. local function disconnect()
  310.     if (stargate.getDialledAddress() ~= "") then
  311.         skipPrint = true
  312.         if stargate.isConnected() == "true" then
  313.             push("Connection Closed by Controller [" .. tostring(math.ceil(os.clock()-startingTime-0.5)) .."]", colors.lightBlue)
  314.             stargate.disconnect()
  315.         else
  316.             push("Connection Cancelled by Controller", colors.lightBlue)
  317.             stargate.disconnect()
  318.         end
  319.     end
  320. end
  321.  
  322. local function performAction(data, prompt)
  323.     if (trimText(data) ~= "") then
  324.         if prompt then
  325.             term.setCursorPos(1, height)
  326.             term.clearLine()
  327.             term.write("> ")
  328.         end
  329.         push("> " .. data:sub(1,width-1), colors.white)
  330.         data = trimText(data:lower())
  331.         if data:sub(1,9) == "register " then
  332.             local args = data:sub(10,-1)
  333.             local address = args:match("(%a+)%s.+")
  334.             local name = args:match("%a+%s(.+)")
  335.             if not(address and name) then
  336.                 push("Missing arguments!", colors.red)
  337.             end
  338.             address = trimText(address):upper()
  339.             name = trimText(name):lower()
  340.             local aResp, aState = isInAddressbook(address)
  341.             local nResp, rState = isInAddressbook(name)
  342.             if aResp and nResp then
  343.                 push("Address and name is already in address book!", colors.red)
  344.             elseif aResp then
  345.                 push("Address is already in address book!", colors.red)
  346.             elseif nResp then
  347.                 push("Name is already in address book!", colors.red)
  348.             else
  349.                 if autofillUnknown(address) then
  350.                     address = autofillUnknown(address)
  351.                     for k,v in pairs(unknowns) do
  352.                         if v == address then
  353.                             table.remove(unknowns, k)
  354.                             break
  355.                         end
  356.                     end
  357.                 end
  358.                 if #address ~= 7 then
  359.                     push("Invalid address!", colors.red)
  360.                 else
  361.                     addresses[name] = address
  362.                     saveEverything()
  363.                     push("Registered: " .. name .. " - " .. address, colors.yellow)
  364.                 end
  365.             end
  366.         elseif data:sub(1,11) == "unregister " then
  367.             local args = autofill(data:sub(12,-1))
  368.             if args then
  369.                 args = trimText(args):upper()
  370.                 if getAddress(args) then
  371.                     push("Unregistered: " .. args:lower() .. " - " .. getAddress(args), colors.yellow)
  372.                     addresses[args:lower()] = nil
  373.                 elseif getID(args) then
  374.                     local index = getID(args)
  375.                     push("Unregistered: " .. index .. " - " .. args, colors.yellow)
  376.                     addresses[index] = nil
  377.                 else
  378.                     for k,v in pairs(unknowns) do
  379.                         if v == args then
  380.                             table.remove(unknowns, k)
  381.                             push("Unregistered unknown: "..args:upper(), colors.yellow)
  382.                             break
  383.                         end
  384.                     end
  385.                 end
  386.                 saveEverything()
  387.             else
  388.                 push("Could not find entry!", colors.red)
  389.             end
  390.         elseif data == "dc" or (data == "disconnect") then
  391.             disconnect()
  392.         elseif data:sub(1,8) == "timeout " then
  393.             local args = data:sub(9,-1)
  394.             if tonumber(args) and (tonumber(args) >= 0) then
  395.                 config["timeout"] = tonumber(args)
  396.                 saveEverything()
  397.                 push("Timeout set to " .. tostring(tonumber(args)), colors.yellow)
  398.             else
  399.                 push("Invalid number!", colors.red)
  400.             end
  401.         elseif data == "autoreject" then
  402.             config["autoreject"] = not(config["autoreject"])
  403.             saveEverything()
  404.             push("Auto-reject: " .. tostring(config["autoreject"]), colors.yellow)
  405.         elseif data == "redial" then
  406.             if previousConnection then
  407.                 disconnect()
  408.                 local resp, err = pcall(stargate.connect, previousConnection)
  409.                 if resp then
  410.                     push("Re-dialling...", colors.yellow)
  411.                 else
  412.                     local proccess = err:match(".+:%d+: (.+)")
  413.                     if err:find("java.") then
  414.                         proccess = proccess:match("java.%S+ (.+)")
  415.                     end
  416.                     push(proccess, colors.red)
  417.                 end
  418.             else
  419.                 push("No gate to redial!", colors.red)
  420.             end
  421.         elseif data:sub(1,5) == "dial " then
  422.             local args = data:sub(6,-1)
  423.             if autofill(args) then
  424.                 if trimText(args):upper() ~= trimText(autofill(args)):upper() then
  425.                     args = autofill(args)
  426.                 end
  427.                 if getAddress(args) then
  428.                     disconnect()
  429.                     local resp, err = pcall(stargate.connect, getAddress(args))
  430.                     if resp then
  431.                         push("Dialling...", colors.yellow)
  432.                     else
  433.                         local proccess = err:match(".+:%d+: (.+)")
  434.                         if err:find("java.") then
  435.                             proccess = proccess:match("java.%S+ (.+)")
  436.                         end
  437.                         push(proccess, colors.red)
  438.                     end
  439.                 else
  440.                     args = args:upper()
  441.                     disconnect()
  442.                     local resp, err = pcall(stargate.connect, args)
  443.                     if resp then
  444.                         push("Dialling...", colors.yellow)
  445.                     else
  446.                         local proccess = err:match(".+:%d+: (.+)")
  447.                         if err:find("java.") then
  448.                             proccess = proccess:match("java.%S+ (.+)")
  449.                         end
  450.                         push(proccess, colors.red)
  451.                     end
  452.                 end
  453.             else
  454.                 args = args:upper()
  455.                 disconnect()
  456.                 local resp, err = pcall(stargate.connect, args)
  457.                 if resp then
  458.                     push("Dialling...", colors.yellow)
  459.                 else
  460.                     local proccess = err:match(".+:%d+: (.+)")
  461.                     if err:find("java.") then
  462.                         proccess = proccess:match("java.%S+ (.+)")
  463.                     end
  464.                     push(proccess, colors.red)
  465.                 end
  466.             end
  467.         elseif data:sub(1,6) == "whois " then
  468.             local args = autofill(data:sub(7,-1))
  469.             if args then
  470.                 if getAddress(args) then
  471.                     push(args:lower() .. "'s address is " .. getAddress(args):upper(), colors.yellow)
  472.                 elseif getID(args) then
  473.                     push(args:upper() .. " is " .. getID(args), colors.yellow)
  474.                 else
  475.                     push("Unknown address!", colors.red)
  476.                 end
  477.             else
  478.                 push("Unknown address!", colors.red)
  479.             end
  480.         elseif data == "list unknown" or (data == "unknown") then
  481.             local list = {"Unknown Address List (" .. tostring(#unknowns) .. "):"}
  482.             local nextLine = ""
  483.             local previousLine = ""
  484.             for k,v in pairs(unknowns) do
  485.                 previousLine = nextLine
  486.                 nextLine = nextLine .. v..", "
  487.                 if #nextLine > width then
  488.                     table.insert(list, previousLine)
  489.                     nextLine = v..", "
  490.                 end
  491.             end
  492.             table.insert(list, nextLine)
  493.             for k,v in ipairs(list) do
  494.                 push(v, colors.yellow)
  495.             end
  496.         elseif data == "list book" or (data == "list addresses") or (data == "list address") or (data == "addresses") then
  497.             local count = 0
  498.             for k,v in pairs(addresses) do
  499.                 count = count+1
  500.             end
  501.             local list = {"Address List (" .. tostring(count) .. "):"}
  502.             local nextLine = ""
  503.             local previousLine = ""
  504.             for k,v in pairs(addresses) do
  505.                 previousLine = nextLine
  506.                 nextLine = nextLine .. k..": "..v..", "
  507.                 if #nextLine > width then
  508.                     table.insert(list, previousLine)
  509.                     nextLine = k..": "..v..", "
  510.                 end
  511.             end
  512.             table.insert(list,nextLine)
  513.             for k,v in ipairs(list) do
  514.                 push(v, colors.yellow)
  515.             end
  516.         elseif data == "me" or (data == "address") or (data == "info") then
  517.             push("Autoreject: " .. tostring(config["autoreject"]), colors.yellow)
  518.             push("Timeout: " .. config["timeout"], colors.yellow)
  519.             push("This stargate address: " .. stargate.getHomeAddress(), colors.yellow)
  520.             if stargate.getDialledAddress() ~= "" then
  521.                 local otherSide = stargate.getDialledAddress()
  522.                 local printAddress = ""
  523.                 if getID(otherSide) then
  524.                     printAddress = getID(otherSide) .. " - " .. otherSide
  525.                 else
  526.                     printAddress = otherSide
  527.                 end
  528.                 if stargate.isConnected() == "false" then
  529.                     push("Dialling: " .. printAddress, colors.yellow)
  530.                 else
  531.                     push("Connected to: " .. printAddress, colors.yellow)
  532.                 end
  533.             else
  534.                 push("Not connected", colors.yellow)
  535.             end
  536.         elseif data == "clear" then
  537.             logs = {}
  538.             push("Logs cleared!",colors.red)
  539.         elseif (data == "logout") or (data == "help") or (data == "lock") or (data == "shell") then
  540.             return false
  541.         elseif data == "immafiringmailazor" then
  542.             return true
  543.         else
  544.             push("Unknown Command!", colors.red)
  545.         end
  546.     end
  547. end
  548.  
  549.  
  550. local function startPanel()
  551.     --local function textField(posX, posY, length, curData, handler)
  552.     while true do
  553.         term.setCursorPos(1, height)
  554.         term.setTextColor(colors.white)
  555.         write("> ")
  556.         readerColor = colors.white
  557.         readerTimer = os.startTimer(300)
  558.         local respType, data = reader(false, readTimeout)
  559.         if respType == "enter" then
  560.             local resp  = performAction(data, true)
  561.             if resp == true then
  562.                 return true
  563.             elseif resp == false then
  564.                 return false
  565.             end
  566.         elseif respType == "handler" then
  567.             push("Inactivity Timeout!", colors.red)
  568.             return false
  569.         end
  570.     end
  571. end
  572.  
  573. local function start()
  574.     term.clear()
  575.     term.setCursorPos(1, 1)
  576.     push("Stargate control panel", colors.yellow)
  577.     push("Pure-text like a bawss", colors.yellow)
  578.     push("Autoreject: " .. tostring(config["autoreject"]), colors.yellow)
  579.     push("Timeout: " .. tostring(config["timeout"]), colors.yellow)
  580.     push("This stargate address: " .. stargate.getHomeAddress(), colors.yellow)
  581.     while true do
  582.         term.setCursorBlink(false)
  583.         term.setCursorPos(1,height-1)
  584.         term.setTextColor(colors.lightGray)
  585.         term.write(string.rep("-", width))
  586.         term.setCursorPos(1,height)
  587.         term.setTextColor(colors.red)
  588.         term.write("-[This control panel is locked]-")
  589.         while true do
  590.             local e, key = os.pullEvent()
  591.             if e == "key" and (key == 15) then
  592.                 break
  593.             end
  594.         end
  595.         term.setTextColor(colors.red)
  596.         term.setCursorPos(1,height)
  597.         term.clearLine()
  598.         term.write("> ")
  599.         readerColor = colors.red
  600.         local _, pass = reader("*")
  601.         if pass == tostring(config["password"]) then
  602.             term.setCursorPos(1,height)
  603.             term.clearLine()
  604.             term.write("Password accepted")
  605.             sleep(1)
  606.             term.clearLine()
  607.             if startPanel() then
  608.                 term.clear()
  609.                 term.setCursorPos(1,1)
  610.                 return "quit"
  611.             end
  612.         else
  613.             term.setCursorPos(1,height)
  614.             term.write("Password incorrect!")
  615.             sleep(3)
  616.         end
  617.     end
  618. end
  619.  
  620. local function glasses()
  621.     if glass then
  622.         glass.clear()
  623.         local mainBox = glass.addBox(10, 10, 150, 55, gColors.gray, 0.7)
  624.         local outlineT = glass.addBox(8,8,154,2,gColors.blue,0.7)
  625.         local outlineB = glass.addBox(8,65,154,2,gColors.blue,0.7)
  626.         for i = 1, 10 do
  627.             glassLines[#glassLines+1] = glass.addText(15,62-(i*5),"",0)
  628.             glassLines[#glassLines].setScale(0.5)
  629.         end
  630.         while true do
  631.             local e, msg, user = os.pullEvent()
  632.             if (e == "chat_command") and (user == "1lann") then
  633.                 performAction(msg)
  634.             end
  635.         end
  636.     else
  637.         while true do os.pullEvent() end
  638.     end
  639. end
  640.  
  641. local function monitor()
  642.     while true do
  643.         local timer = 0
  644.         if (stargate.getDialledAddress() ~= "") then
  645.             local skipAll = false
  646.             local otherSide = stargate.getDialledAddress()
  647.             if not(isAddressRecorded(otherSide)) then
  648.                 table.insert(unknowns, otherSide)
  649.                 saveEverything()
  650.             end
  651.             if otherSide ~= "" then
  652.                 previousConnection = otherSide
  653.                 if stargate.isInitiator() == "true" then
  654.                     if getID(otherSide) then
  655.                         push("Outgoing: " .. getID(otherSide) .. " - " .. otherSide, colors.lightBlue)
  656.                     else
  657.                         push("Outgoing: " .. otherSide, colors.lightBlue)
  658.                     end
  659.                 elseif stargate.isInitiator() == "false" then
  660.                     if getID(otherSide) then
  661.                         push("Incoming: " .. getID(otherSide) .. " - " .. otherSide, colors.lightBlue)
  662.                     else
  663.                         push("Incoming: " .. otherSide, colors.lightBlue)
  664.                     end
  665.                     if config["autoreject"] then
  666.                         disconnect()
  667.                         push("Auto-rejected!", colors.lightBlue)
  668.                         skipAll = true
  669.                     end
  670.                 else
  671.                     skipAll = true
  672.                 end
  673.             end
  674.             if not(skipAll) then
  675.                 sleep(1)
  676.                 if stargate.getDialledAddress() == "" then
  677.                     push("Connection Rejected by Remote!", colors.red)
  678.                     skipAll = true
  679.                 end
  680.                 if not(skipAll) then
  681.                     while stargate.isConnected() == "false" and (stargate.getDialledAddress() ~= "") do
  682.                         sleep(0.5)
  683.                     end
  684.                     if stargate.getDialledAddress() == "" then
  685.                         if not(skipPrint) then
  686.                             push("Connection Cancelled by Remote", colors.lightBlue)
  687.                         else
  688.                             skipPrint = false
  689.                         end
  690.                     else
  691.                         push("Connection Established", colors.lightBlue)
  692.                         startingTime = os.clock()
  693.                         while stargate.isConnected() == "true" do
  694.                             if not(timer > 0) then
  695.                                 if config["timeout"] > 0 then
  696.                                     timer = os.clock()+config["timeout"]
  697.                                 end
  698.                             elseif os.clock() >= timer then
  699.                                 push("Stargate Timeout", colors.lightBlue)
  700.                                 disconnect()
  701.                                 break
  702.                             end
  703.                             sleep(0.5)
  704.                         end
  705.                         if not(skipPrint) then
  706.                             push("Connection Closed by Remote ["..tostring(math.ceil(os.clock()-startingTime-0.5)).."]", colors.lightBlue)
  707.                         else
  708.                             skipPrint = false
  709.                         end
  710.                     end
  711.                 end
  712.             end
  713.         end
  714.         sleep(0.5)
  715.     end
  716. end
  717.  
  718. loadEverything()
  719. parallel.waitForAny(glasses, start, monitor)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement