/// <summary> /// Creates all possible LogConsole Commands with their coherent parameters /// NEW LogConsole COMMANDS MUST BE ADDED HERE TOO /// </summary> public static void Initialize() { //////// LogConsole COMMANDS /////////////////LogConsole COMMANDS /////////////////////////////////////////////// ConsoleCommand cmd1 = new ConsoleCommand("help", new string[] { "", "", "" }, false, 0, UserAuthorization.None); ConsoleCommand cmd2 = new ConsoleCommand("terminate", new string[] { "", "", "" }, false, 0, UserAuthorization.None); ConsoleCommand cmd3 = new ConsoleCommand("clear", new string[] { "", "", "" }, false, 0, UserAuthorization.None); ConsoleCommand cmd4 = new ConsoleCommand("add", new string[] { "type", "", "" }, true, 1, UserAuthorization.None); ConsoleCommand cmd5 = new ConsoleCommand("select", new string[] { "type", "identifier", "" }, true, 2, UserAuthorization.None); ConsoleCommand cmd6 = new ConsoleCommand("selected", new string[] { "", "", "" }, false, 0, UserAuthorization.None); ConsoleCommand cmd7 = new ConsoleCommand("stop", new string[] { "type", "identifier", "" }, true, 2, UserAuthorization.None); ConsoleCommand cmd8 = new ConsoleCommand("delete", new string[] { "type", "identifier", "" }, true, 2, UserAuthorization.None); // NEW LogConsole COMMANDS MUST BE ADDED HERE commands.AddRange(new ConsoleCommand[] { cmd1, cmd2, cmd3, cmd4, cmd5, cmd6, cmd7, cmd8 }.ToList()); }
/// <summary> /// Validates if a command has the right amount of parameters /// </summary> /// <param name="cmd"></param> /// <returns></returns> public static bool CanInterpret(ConsoleCommand cmd, out string parserMsg) { string msg = string.Empty; ConsoleCommand validVersion = ConsoleCommandWords.FindCommand(cmd.CommandWord); if (validVersion.Matches(cmd, out msg)) { parserMsg = msg; return(true); } else { parserMsg = msg; return(false); } }
/// <summary> /// Checks if a given keyword is valid command and saves his given parameters /// </summary> /// <param name="commandLine"></param> /// <param name="cmd"></param> /// <returns></returns> public static bool CanRead(string commandLine, out ConsoleCommand cmd) { string keyword = commandLine.Split(' ')[0]; string param1; string param2; try { param1 = commandLine.Split(' ')[1]; } catch { param1 = string.Empty; } try { param2 = commandLine.Split(' ')[2]; } catch { param2 = string.Empty; } if (keyword != string.Empty) { if (ConsoleCommandWords.IsCommand(keyword)) { cmd = new ConsoleCommand(keyword); cmd.Parameters[0] = param1; cmd.Parameters[1] = param2; return(true); } else { cmd = new ConsoleCommand(commandLine); return(false); } } else { cmd = new ConsoleCommand(commandLine); return(false); } }
/// <summary> /// Attempts to parse the command-line entered /// </summary> /// <param name="commandLine"></param> public static void AttemptParsing(string commandLine) { ConsoleCommand cmd = new ConsoleCommand(); string parserMsg = string.Empty; if (Parser.CanRead(commandLine, out cmd)) { if (Parser.CanInterpret(cmd, out parserMsg)) { ConsoleCommandExecutor.ExecuteCommand(cmd); } else { Break(); ThrowParseError(parserMsg, cmd.CommandWord); } } else { Break(); ThrowParseError("Unknown command", cmd.CommandWord); } }
/// <summary> /// Validates if a command has the right amount of parameters /// </summary> /// <param name="cmd"></param> /// <returns></returns> public bool Matches(ConsoleCommand cmd, out string msg) { if (this.HasParameters == true && this.NeedsParameters == 1) { if (cmd.Parameters[0] == string.Empty) { msg = "missing single parameter "; return(false); } } if (this.HasParameters == true && this.NeedsParameters == 2) { if (cmd.Parameters[0] == string.Empty || cmd.Parameters[1] == string.Empty) { msg = "missing one or more parameters "; return(false); } } if (this.HasParameters == false) { if (cmd.Parameters[0] != string.Empty || cmd.Parameters[1] != string.Empty) { msg = "redundant parameter. command does not need parameters"; return(false); } else { msg = ""; return(true); } } else { msg = ""; return(true); } }
/// <summary> /// Executes any given command if known to the parser /// </summary> /// <param name="cmd"></param> public static string ExecuteCommand(ConsoleCommand cmd) { string param1 = cmd.Parameters[0]; string param2 = cmd.Parameters[1]; string param3 = cmd.Parameters[2]; string command = cmd.CommandWord; string parserMessage = string.Empty; if (!Parser.CanInterpret(cmd, out parserMessage)) { LogConsole.WriteLine("ERROR WHILE PARSING COMMAND: " + command + " ::: INVALID"); LogConsole.Break(); return("PARSER_ERROR"); } UserAuthorization userAuthorization = UserAuthorization.None; UserAuthorization requiredAuthorization = ConsoleCommandWords.FindCommand(command).RequiredAuthorization; if (requiredAuthorization != UserAuthorization.None) { userAuthorization = UserManager.GetUserAuthorization(param1); if (userAuthorization != requiredAuthorization) { LogConsole.WriteLine(UserManager.GetUserAuthorizationErrorMessage(requiredAuthorization, userAuthorization, param1)); LogConsole.Break(); return("UNAUTHORIZED"); } } switch (command) { case "terminate": { LogConsole.PrintCommand(cmd); Actions.TerminateServer(); return(string.Empty); } case "clear": { LogConsole.PrintCommand(cmd); LogConsole.Clear(); return(string.Empty); } case "help": { LogConsole.PrintCommand(cmd); LogConsole.Break(); LogConsole.Write(ConsoleCommandWords.CommandList()); return(string.Empty); } case "add": { LogConsole.PrintCommand(cmd); LogConsole.Break(); switch (param1) { case "session": { LogConsole.Break(); Session newSession = new Session(); SessionManager.AddSession(newSession, string.Empty, false); LogConsole.Write(newSession.Details()); return(newSession.Id); } default: { LogConsole.Break(); LogConsole.ThrowParseError("Invalid Type", param1); return(string.Empty); } } } /// DEPRECATED //case "select": // { // LogConsole.PrintCommand(cmd); // LogConsole.Break(); // switch (param1) // { // case "session": // { // if (LogConsole.SelectSession(param2, SessionManager.Sessions) != false) // { // LogConsole.Break(); // LogConsole.Write("Selected session is now " + param2.ToUpper()); // SessionManager.OnSelectedSessionChanged(); // } // else // { // LogConsole.Break(); // LogConsole.ThrowParseError("Unknown Session!", param2.ToUpper()); // } // return string.Empty; // } // default: // { // LogConsole.Break(); // LogConsole.ThrowParseError("Invalid Type", param1); // return string.Empty; // } // } // } case "selected": { LogConsole.PrintCommand(cmd); LogConsole.Break(); if (LogConsole.currentSession == null) { LogConsole.Write("No selected session"); } else { LogConsole.Write("Selected session is " + LogConsole.currentSession.Id); } return(string.Empty); } case "stop": { switch (param1) { case "session": { LogConsole.Break(); if (SessionManager.SessionExists(param2)) { SessionManager.FindSessionBySessionId(param2).Stop(); LogConsole.Write("Stopped Session " + param2); } else { LogConsole.ThrowParseError("unknown " + param1 + " : " + param2 + " - Session does not exist", cmd.CommandWord); } return(string.Empty); } default: { LogConsole.Break(); LogConsole.ThrowParseError("Invalid Type", param1); return(string.Empty); } } } case "delete": { switch (param1) { case "session": { LogConsole.Break(); if (SessionManager.SessionExists(param2)) { if (SessionManager.FindSessionBySessionId(param2).isStopped) { SessionManager.FindSessionBySessionId(param2).Terminate(); SessionManager.DeleteSession(param2); LogConsole.Write("Deleted Session " + param2); } else { LogConsole.ThrowException(SessionManager.FindSessionBySessionId(param2).Id, "Session is still running! Session must be stopped before termination"); } return(string.Empty); } else { LogConsole.ThrowParseError("unknown " + param1 + " : " + param2 + " - Session does not exist", cmd.CommandWord); } return(string.Empty); } default: { LogConsole.Break(); LogConsole.ThrowParseError("Invalid Type", param1); return(string.Empty); } } } default: { return(string.Empty); } } }
/// <summary> /// Print routine if a command is executed /// </summary> /// <param name="cmd"></param> public static void PrintCommand(ConsoleCommand cmd) { Break(); Write("Execute command: # " + cmd.ConvertToString() + " #"); }