Software /
code /
prosody
Diff
plugins/mod_admin_telnet.lua @ 9735:2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 27 Dec 2018 02:53:34 +0100 |
parent | 9734:cc01bb7a3305 |
child | 9736:a5ae3f4e1a40 |
line wrap: on
line diff
--- 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