Example #1
0
        public CmdLineArguments GetArguments(string cmdLine)
        {
            var tokenizer = new CmdTokenizer(cmdLine);
            tokenizer.ReadNext(); //Skip program path

            var result = new CmdLineArguments { TaskToDo = TaskToDo.ShowHelp };
            var token = tokenizer.ReadNext();
            while (!string.IsNullOrWhiteSpace(token))
            {
                if (token == "--slnrun-verbose" || token == "/slnrun-verbose")
                    result.Verbose = true;
                else
                {
                    result.SolutionToRun = token;
                    result.Parameter = tokenizer.ReadRemaining();
                    result.TaskToDo = TaskToDo.RunSolution;
                }
                token = tokenizer.ReadNext();
            }
            return result;
        }
Example #2
0
        private bool ProcessEventCommand(string args, AdminClientServicePeer peer, int targetServiceID)
        {
            if (args == "goal")
            {
                this.ProcessMicroPlayCommand("monster_kill", "", targetServiceID);
                this.ProcessMicroPlayCommand("autofish_item", "capsule_ap100", targetServiceID);
                return(true);
            }
            CmdTokenizer cmdTokenizer = new CmdTokenizer(args);
            string       next         = cmdTokenizer.GetNext();
            string       next2        = cmdTokenizer.GetNext();
            string       template     = null;
            string       msgstart     = null;
            string       msgnotify    = null;
            string       msgend       = null;
            string       feature      = null;
            string       scriptstart  = null;
            string       scriptend    = null;
            int          msginterval  = 1800;
            int          num          = 0;
            string       username     = "******";
            DateTime?    startTime    = null;
            DateTime?    endTime      = null;
            TimeSpan?    periodBegin  = null;
            TimeSpan?    periodEnd    = null;
            string       text;

            while (cmdTokenizer.GetNext(out text))
            {
                if (text == "template")
                {
                    template = cmdTokenizer.GetNext();
                }
                else if (text == "feature")
                {
                    feature = cmdTokenizer.GetNext();
                }
                else if (text == "scriptstart")
                {
                    scriptstart = cmdTokenizer.GetNext();
                }
                else
                {
                    if (!(text == "scriptend"))
                    {
                        if (text == "starttime")
                        {
                            if (num > 0)
                            {
                                Log <AdminClientService> .Logger.Error("starttime은 startcount와 함께 사용될 수 없습니다.");

                                return(false);
                            }
                            try
                            {
                                string next3 = cmdTokenizer.GetNext();
                                if (next3.Length > 0)
                                {
                                    startTime = new DateTime?(DateTime.Parse(next3));
                                }
                                continue;
                            }
                            catch (Exception ex)
                            {
                                Log <AdminClientService> .Logger.Error("starttime 파싱 도중 에러가 발생했습니다", ex);

                                return(false);
                            }
                        }
                        if (text == "endtime")
                        {
                            try
                            {
                                string next4 = cmdTokenizer.GetNext();
                                if (next4.Length > 0)
                                {
                                    endTime = new DateTime?(DateTime.Parse(next4));
                                }
                                continue;
                            }
                            catch (Exception ex2)
                            {
                                Log <AdminClientService> .Logger.Error("endtime 파싱 도중 에러가 발생했습니다", ex2);

                                return(false);
                            }
                        }
                        if (text == "periodbegin")
                        {
                            try
                            {
                                string next5 = cmdTokenizer.GetNext();
                                if (next5.Length > 0)
                                {
                                    periodBegin = new TimeSpan?(TimeSpan.Parse(next5));
                                }
                                continue;
                            }
                            catch (Exception ex3)
                            {
                                Log <AdminClientService> .Logger.Error("periodbegin 파싱 도중 에러가 발생했습니다", ex3);

                                return(false);
                            }
                        }
                        if (text == "periodend")
                        {
                            try
                            {
                                string next6 = cmdTokenizer.GetNext();
                                if (next6.Length > 0)
                                {
                                    periodEnd = new TimeSpan?(TimeSpan.Parse(next6));
                                }
                                continue;
                            }
                            catch (Exception ex4)
                            {
                                Log <AdminClientService> .Logger.Error("periodend 파싱 도중 에러가 발생했습니다", ex4);

                                return(false);
                            }
                        }
                        if (text == "msgstart")
                        {
                            msgstart = cmdTokenizer.GetNext();
                            continue;
                        }
                        if (text == "msgnotify")
                        {
                            msgnotify = cmdTokenizer.GetNext();
                            continue;
                        }
                        if (text == "msgend")
                        {
                            msgend = cmdTokenizer.GetNext();
                            continue;
                        }
                        if (text == "msginterval")
                        {
                            try
                            {
                                string next7 = cmdTokenizer.GetNext();
                                if (next7.Length > 0)
                                {
                                    msginterval = int.Parse(next7);
                                }
                                continue;
                            }
                            catch (Exception ex5)
                            {
                                Log <AdminClientService> .Logger.Error("msginterval 파싱 도중 에러가 발생했습니다", ex5);

                                return(false);
                            }
                        }
                        if (text == "startcount")
                        {
                            if (startTime != null)
                            {
                                Log <AdminClientService> .Logger.Error("startcount는 starttime과 함께 사용될 수 없습니다.");

                                return(false);
                            }
                            try
                            {
                                string next8 = cmdTokenizer.GetNext();
                                if (next8.Length > 0)
                                {
                                    num = int.Parse(next8);
                                }
                                continue;
                            }
                            catch (Exception ex6)
                            {
                                Log <AdminClientService> .Logger.Error("startcount 파싱 도중 에러가 발생했습니다", ex6);

                                return(false);
                            }
                        }
                        if (text == "username")
                        {
                            username = cmdTokenizer.GetNext();
                            continue;
                        }
                        Log <AdminClientService> .Logger.ErrorFormat("알수 없는 옵션입니다. [{0}]", text);

                        return(false);
                    }
                    scriptend = cmdTokenizer.GetNext();
                }
            }
            if (next == "reg")
            {
                if (next2.Length > 0)
                {
                    return(EventDataContext.RegisterEvent(next2, template, feature, scriptstart, scriptend, startTime, endTime, periodBegin, periodEnd, msgstart, msgnotify, msgend, msginterval, num, username, peer));
                }
            }
            else if (next == "end")
            {
                if (next2.Length > 0)
                {
                    return(EventDataContext.EndEvent(next2, scriptend, msgend, peer));
                }
            }
            else
            {
                if (next == "list")
                {
                    return(EventDataContext.ListEvent(peer));
                }
                if (next == "show")
                {
                    if (next2.Length > 0)
                    {
                        return(EventDataContext.ShowEvent(next2, peer));
                    }
                }
                else if (next == "resume")
                {
                    EventDataContext.StartProcessing();
                }
            }
            return(false);
        }
Example #3
0
File: Shell.cs Project: r2d2m/NIOS
    bool ExecuteCommand_2(Session session, string cmd)
    {
        var tokenizer = new CmdTokenizer(cmd);

        var parts = new List <string>();

        var isSimpleExecution = true;

        while (tokenizer.Can)
        {
            tokenizer.MoveNext();

            var c = tokenizer.currentText;
            if (c == "|" || c == ">" || c == "<")
            {
                isSimpleExecution = false;
            }
            parts.Add(c);
        }

        if (isSimpleExecution)
        {
            return(TryExecute(session, parts.First(), parts.Skip(1).ToArray()));
        }

        //terminal.GetWriter().WriteLine("parsed: " + string.Join("#", parts.ToArray()));

        MemoryStream pipe = null;

        TextReader stdIn;
        TextWriter stdOut;
        var        arguments   = new List <string>();
        var        programName = string.Empty;

        var pipeliningType = string.Empty;

        foreach (var p in parts)
        {
            if (p == "|" || p == ">" || p == ">>" || p == "<")
            {
                pipeliningType = p;

                if (pipe == null)
                {
                    stdIn = Console.In;
                }
                else
                {
                    stdIn = new StreamReader(pipe);
                }

                pipe   = new MemoryStream();
                stdOut = new StreamWriter(pipe);

                if (TryExecute(session, stdIn, stdOut, programName, arguments.ToArray()) == false)
                {
                    return(false);
                }
                programName = string.Empty;
                arguments.Clear();

                stdOut.Flush();
                pipe.Position = 0;

                continue;
            }

            if (programName == string.Empty)
            {
                programName = p;
            }
            else
            {
                arguments.Add(p);
            }
        }

        if (pipeliningType == "|")
        {
            stdIn  = new StreamReader(pipe);
            stdOut = Console.Out;
            if (TryExecute(session, stdIn, stdOut, programName, arguments.ToArray()) == false)
            {
                return(false);
            }
        }
        if (pipeliningType == ">")
        {
            var file = Path.GetFullPath(programName);
            using (var r = new StreamReader(pipe))
                File.WriteAllText(file, r.ReadToEnd());
        }

        return(true);
    }