Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local internet = require("internet")
- local term = require("term")
- local text = require("text")
- local event = require("event")
- local shell = require("shell")
- if not component.isAvailable("internet") then
- io.stderr:write("telnet requires an Internet Card to run!\n")
- return
- end
- local args, options = shell.parse(...)
- if #args < 1 then
- print("Usage: telnet <server:port>")
- return
- end
- local host = args[1]
- local gpu = component.gpu
- local w, h = gpu.getResolution()
- local hist = {}
- local sock, reason = internet.open(host)
- if not sock then
- io.stderr:write(reason .. "\n")
- return
- end
- sock:setTimeout(0.05)
- --Function from the built in IRC program
- local function print(message, overwrite)
- local w, h = component.gpu.getResolution()
- local line
- repeat
- line, message = text.wrap(text.trim(message), w, w)
- if not overwrite then
- component.gpu.copy(1, 1, w, h - 1, 0, -1)
- end
- overwrite = false
- component.gpu.fill(1, h - 1, w, 1, " ")
- component.gpu.set(1, h - 1, line)
- until not message or message == ""
- end
- local function draw()
- if not sock then
- return false
- end
- repeat
- local ok, line = pcall(sock.read, sock)
- if ok then
- if not line then
- print("Connection lost.")
- sock:flush()
- sock:close()
- sock:flush()
- sock = nil
- os.exit()
- return false
- end
- print(line)
- end
- until not ok
- end
- local function uin()
- term.setCursor(1,h)
- line = term.read(hist)
- line2 = text.trim(line)
- if line2 == "/exit" then
- return false
- elseif sock == nil then
- return false
- else
- sock:write(line2.."\r\n")
- end
- return true
- end
- local going = true
- local dLoop = event.timer(0.5, draw, math.huge)
- repeat
- r = uin()
- until not r
- if dLoop then
- event.cancel(dLoop)
- end
- if sock then
- sock:write("QUIT\r\n")
- sock:flush()
- sock:close()
- sock:flush()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement