From a4fc6b5fbba7fd9a7b147b11a0d1c3ded1834d54 Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Tue, 27 Mar 2007 08:10:15 +0000 Subject: * Now there's one Console class, and instead the apps responds to cmd's and show's * Removed Golden Future TCP/SimChat options * Moved Ode.NET.dll to bin and changed prebuild accordingly (due to Prebuild limitations) * Normalized some namespaces * Added FxCop project * Added (temp disabled) Servers project (for great justice) --- OpenSim.Framework.Console/ConsoleBase.cs | 144 +++++++++++++++++++++++++++---- 1 file changed, 125 insertions(+), 19 deletions(-) (limited to 'OpenSim.Framework.Console/ConsoleBase.cs') diff --git a/OpenSim.Framework.Console/ConsoleBase.cs b/OpenSim.Framework.Console/ConsoleBase.cs index 5343e71..e2e4457 100644 --- a/OpenSim.Framework.Console/ConsoleBase.cs +++ b/OpenSim.Framework.Console/ConsoleBase.cs @@ -1,45 +1,151 @@ using System; +using System.IO; namespace OpenSim.Framework.Console { - public abstract class ConsoleBase + public class ConsoleBase { + StreamWriter Log; + public conscmd_callback cmdparser; + public string componentname; - public enum ConsoleType + // STUPID HACK ALERT!!!! STUPID HACK ALERT!!!!! + // constype - the type of console to use (see enum ConsoleType) + // sparam - depending on the console type: + // TCP - the IP to bind to (127.0.0.1 if blank) + // Local - param ignored + // and for the iparam: + // TCP - the port to bind to + // Local - param ignored + // LogFile - duh + // componentname - which component of the OGS system? (user, asset etc) + // cmdparser - a reference to a conscmd_callback object + + public ConsoleBase(string LogFile, string componentname, conscmd_callback cmdparser) { - Local, // Use stdio - TCP, // Use TCP/telnet - SimChat // Use in-world chat (for gods) + this.componentname = componentname; + this.cmdparser = cmdparser; + + System.Console.WriteLine("ServerConsole.cs - creating new local console"); + System.Console.WriteLine("Logs will be saved to current directory in " + LogFile); + Log = File.AppendText(LogFile); + Log.WriteLine("========================================================================"); + Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString()); } - public abstract void Close(); + public void Close() + { + Log.WriteLine("Shutdown at " + DateTime.Now.ToString()); + Log.Close(); + } + + public void Write(string format, params object[] args) + { + Log.Write(format, args); + System.Console.Write(format, args); + return; + } - public abstract void Write(string format, params object[] args); + public void WriteLine(string format, params object[] args) + { + Log.WriteLine(format, args); + System.Console.WriteLine(format, args); + return; + } - public abstract void WriteLine(string format, params object[] args); + public string ReadLine() + { + string TempStr = System.Console.ReadLine(); + Log.WriteLine(TempStr); + return TempStr; + } - public abstract string ReadLine(); + public int Read() + { + int TempInt = System.Console.Read(); + Log.Write((char)TempInt); + return TempInt; + } - public abstract int Read(); + // Displays a prompt and waits for the user to enter a string, then returns that string + // Done with no echo and suitable for passwords + public string PasswdPrompt(string prompt) + { + // FIXME: Needs to be better abstracted + Log.WriteLine(prompt); + this.Write(prompt); + ConsoleColor oldfg = System.Console.ForegroundColor; + System.Console.ForegroundColor = System.Console.BackgroundColor; + string temp = System.Console.ReadLine(); + System.Console.ForegroundColor = oldfg; + return temp; + } // Displays a command prompt and waits for the user to enter a string, then returns that string - public abstract string CmdPrompt(string prompt); + public string CmdPrompt(string prompt) + { + this.Write(prompt); + return this.ReadLine(); + } // Displays a command prompt and returns a default value if the user simply presses enter - public abstract string CmdPrompt(string prompt, string defaultresponse); + public string CmdPrompt(string prompt, string defaultresponse) + { + string temp = CmdPrompt(prompt); + if (temp == "") + { + return defaultresponse; + } + else + { + return temp; + } + } // Displays a command prompt and returns a default value, user may only enter 1 of 2 options - public abstract string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB); + public string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) + { + bool itisdone = false; + string temp = CmdPrompt(prompt, defaultresponse); + while (itisdone == false) + { + if ((temp == OptionA) || (temp == OptionB)) + { + itisdone = true; + } + else + { + this.WriteLine("Valid options are " + OptionA + " or " + OptionB); + temp = CmdPrompt(prompt, defaultresponse); + } + } + return temp; + } // Runs a command with a number of parameters - public abstract Object RunCmd(string Cmd, string[] cmdparams); + public Object RunCmd(string Cmd, string[] cmdparams) + { + cmdparser.RunCmd(Cmd, cmdparams); + return null; + } // Shows data about something - public abstract void ShowCommands(string ShowWhat); - - // Displays a prompt to the user and then runs the command they entered - public abstract void MainConsolePrompt(); + public void ShowCommands(string ShowWhat) + { + cmdparser.Show(ShowWhat); + } - public abstract void SetStatus(string status); + public void MainConsolePrompt() + { + string[] tempstrarray; + string tempstr = this.CmdPrompt(this.componentname + "# "); + tempstrarray = tempstr.Split(' '); + string cmd = tempstrarray[0]; + Array.Reverse(tempstrarray); + Array.Resize(ref tempstrarray, tempstrarray.Length - 1); + Array.Reverse(tempstrarray); + string[] cmdparams = (string[])tempstrarray; + RunCmd(cmd, cmdparams); + } } } -- cgit v1.1