// ---------------------------------------------------------------------------------------- // 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("", "")); }