コード例 #1
0
        // ----------------------------------------------------------------------------------------
        // 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(""));
        }
コード例 #2
0
        // ----------------------------------------------------------------------------------------
        // 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("", "/"));
        }
コード例 #3
0
        // ----------------------------------------------------------------------------------------
        // 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("", ""));
        }