// ---------------------------------------------------------------------------------------- // Route: "/input" public static ResponseContext Input(RequestContext context) { // проверим доступ if (context.sessionManager.SessionGetKey(context.session, "user") == null) { // пользователь неавторизован - ничего не возвращаем return(new ResponseContext("")); } // глобальные переменные в сессии TaggedProcess p = (TaggedProcess)context.sessionManager.SessionGetKey(context.session, "process"); if (p == null) { // процесс еще не запущен - ничего не возвращаем return(new ResponseContext("")); } if (context.Method == RequestMethod.POST) { // AJAX ЗАПРОС: ЗАПРОС ВВОДА КОМАНДЫ p?.StandardInput.WriteLine((string)context.GetParam("cmd") + "\r\n"); } return(new ResponseContext("")); }
// ---------------------------------------------------------------------------------------- // Route: "/output" public static ResponseContext Output(RequestContext context) { // проверим доступ if (context.sessionManager.SessionGetKey(context.session, "user") == null) { // пользователь неавторизован - ничего не возвращаем return(new ResponseContext("", "")); } // глобальные переменные в сессии TaggedProcess p = (TaggedProcess)context.sessionManager.SessionGetKey(context.session, "process"); if (p == null) { // процесс еще не запущен - ничего не возвращаем return(new ResponseContext("")); } if (context.Method == RequestMethod.POST) { // AJAX ЗАПРОС: ЗАПРОС ВЫВОДА int queueLen = p.outQueue.Count; if (queueLen > 0) { List <string> arr = new List <string>(); string buf = ""; for (int i = 0; i < queueLen; i++) { if (p.outQueue.TryDequeue(out buf)) { arr.Add(buf); } } return(new ResponseContext(TemplateParserUtilities.ConvertToJson(arr))); } } // если GET запрос - то перенаправим на главную страницу return(new ResponseContext("", "/")); }
// ---------------------------------------------------------------------------------------- // Route: "/cmdline" public static ResponseContext Cmdline(RequestContext context) { // проверим доступ if (context.sessionManager.SessionGetKey(context.session, "user") == null) { // пользователь неавторизован - редирект на главную страницу return(new ResponseContext("", "/")); } // глобальные переменные в сессии TaggedProcess p = (TaggedProcess)context.sessionManager.SessionGetKey(context.session, "process"); string cmd = (string)context.sessionManager.SessionGetKey(context.session, "cmd", "cmd.exe"); if (context.Method == RequestMethod.GET) { // отобразим страницу context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false))); context.templateVariables.Add("cmd", cmd); TemplateParser tp = new TemplateParser(); return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables))); } else if (context.Method == RequestMethod.POST) { if (context.parameters.ContainsKey("btnRun")) { // ЗАПРОС ЗАПУСКА КОМАНДЫ p?.Kill(); // завершим процесс, если был открыт cmd = context.GetParam("cmd", "cmd.exe"); context.sessionManager.SessionSetKey(ref context.session, "cmd", cmd); // запустим процесс в скрытом окне, перенаправим потоки Stdin и Stdout в наш обработчик p = new TaggedProcess(cmd); try { p.Start(); p.BeginOutputReadLine(); p.BeginErrorReadLine(); p.StandardInput.WriteLine(); } catch { p = null; } context.sessionManager.SessionSetKey(ref context.session, "process", p); context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false))); context.templateVariables.Add("cmd", cmd); TemplateParser tp = new TemplateParser(); return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables))); } else if (context.parameters.ContainsKey("btnStop")) { // ЗАПРОС ОСТАНОВА КОМАНДЫ p?.Kill(); p = null; context.sessionManager.SessionSetKey(ref context.session, "process", p); context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false))); context.templateVariables.Add("cmd", cmd); TemplateParser tp = new TemplateParser(); return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables))); } } return(new ResponseContext("", "")); }