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; }
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); }
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); }