# HG changeset patch # User Kim Alvefur # Date 1545875614 -3600 # Node ID 2d8ca54ecbc6b63ce2dd63b4019f93cdcf24fb87 # Parent cc01bb7a3305e75dd92e6135cbc4579cd5374c88 mod_admin_telnet: Enable async processing using util.async diff -r cc01bb7a3305 -r 2d8ca54ecbc6 plugins/mod_admin_telnet.lua --- a/plugins/mod_admin_telnet.lua Fri Dec 28 20:56:01 2018 +0100 +++ b/plugins/mod_admin_telnet.lua Thu Dec 27 02:53:34 2018 +0100 @@ -31,6 +31,7 @@ local envload = require "util.envload".envload; local envloadfile = require "util.envload".envloadfile; local has_pposix, pposix = pcall(require, "util.pposix"); +local async = require "util.async"; local commands = module:shared("commands") local def_env = module:shared("env"); @@ -48,6 +49,21 @@ console = {}; +local runner_callbacks = {}; + +function runner_callbacks:ready() + self.data.conn:resume(); +end + +function runner_callbacks:waiting() + self.data.conn:pause(); +end + +function runner_callbacks:error(err) + module:log("error", "Traceback[telnet]: %s", err); +end + + function console:new_session(conn) local w = function(s) conn:write(s:gsub("\n", "\r\n")); end; local session = { conn = conn; @@ -63,6 +79,11 @@ }; session.env = setmetatable({}, default_env_mt); + session.thread = async.runner(function (line) + console:process_line(session, line); + session.send(string.char(0)); + end, runner_callbacks, session); + -- Load up environment with helper objects for name, t in pairs(def_env) do if type(t) == "table" then @@ -151,8 +172,7 @@ for line in data:gmatch("[^\n]*[\n\004]") do if session.closed then return end - console:process_line(session, line); - session.send(string.char(0)); + session.thread:run(line); end session.partial_data = data:match("[^\n]+$"); end