Merge branch 'master' into careminster
						commit
						3c1a58c67a
					
				|  | @ -711,7 +711,7 @@ namespace OpenSim.Framework.Console | |||
|         /// </summary> | ||||
|         public void Prompt() | ||||
|         { | ||||
|             string line = ReadLine(m_defaultPrompt + "# ", true, true); | ||||
|             string line = ReadLine(DefaultPrompt + "# ", true, true); | ||||
| 
 | ||||
|             if (line != String.Empty) | ||||
|                 Output("Invalid command"); | ||||
|  |  | |||
|  | @ -43,15 +43,7 @@ namespace OpenSim.Framework.Console | |||
| 
 | ||||
|         public object ConsoleScene { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The default prompt text. | ||||
|         /// </summary> | ||||
|         public string DefaultPrompt | ||||
|         { | ||||
|             set { m_defaultPrompt = value; } | ||||
|             get { return m_defaultPrompt; } | ||||
|         } | ||||
|         protected string m_defaultPrompt; | ||||
|         public string DefaultPrompt { get; set; } | ||||
| 
 | ||||
|         public ConsoleBase(string defaultPrompt) | ||||
|         { | ||||
|  |  | |||
|  | @ -46,13 +46,18 @@ namespace OpenSim.Framework.Console | |||
| 
 | ||||
|         public ICommands Commands { get { return m_commands; } } | ||||
| 
 | ||||
|         public string DefaultPrompt { get; set; } | ||||
| 
 | ||||
|         public void Prompt() {} | ||||
| 
 | ||||
|         public void RunCommand(string cmd) {} | ||||
| 
 | ||||
|         public string ReadLine(string p, bool isCommand, bool e) { return ""; } | ||||
| 
 | ||||
|         public object ConsoleScene { get { return null; } } | ||||
|         public object ConsoleScene {  | ||||
|             get { return null; } | ||||
|             set {} | ||||
|         } | ||||
| 
 | ||||
|         public void Output(string text, string level) {} | ||||
|         public void Output(string text) {} | ||||
|  |  | |||
|  | @ -82,6 +82,11 @@ namespace OpenSim.Framework | |||
| 
 | ||||
|         ICommands Commands { get; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The default prompt text. | ||||
|         /// </summary> | ||||
|         string DefaultPrompt { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Display a command prompt on the console and wait for user input | ||||
|         /// </summary> | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace OpenSim.Framework | |||
| { | ||||
|     public interface IConsole | ||||
|     { | ||||
|         object ConsoleScene { get; } | ||||
|         object ConsoleScene { get; set; } | ||||
| 
 | ||||
|         void Output(string text, string level); | ||||
|         void Output(string text); | ||||
|  |  | |||
|  | @ -61,22 +61,6 @@ namespace OpenSim.Framework.Servers | |||
|         /// server. | ||||
|         /// </summary> | ||||
|         private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000); | ||||
| 
 | ||||
|         protected CommandConsole m_console; | ||||
|         protected OpenSimAppender m_consoleAppender; | ||||
|         protected IAppender m_logFileAppender = null;  | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Record the initial startup directory for info purposes | ||||
|         /// </summary> | ||||
|         protected string m_startupDirectory = Environment.CurrentDirectory; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Server version information.  Usually VersionInfo + information about git commit, operating system, etc. | ||||
|         /// </summary> | ||||
|         protected string m_version; | ||||
| 
 | ||||
|         protected string m_pidFile = String.Empty; | ||||
|          | ||||
|         /// <summary> | ||||
|         /// Random uuid for private data  | ||||
|  | @ -91,27 +75,11 @@ namespace OpenSim.Framework.Servers | |||
| 
 | ||||
|         public BaseOpenSimServer() : base() | ||||
|         { | ||||
|             m_version = VersionInfo.Version; | ||||
|              | ||||
|             // Random uuid for private data | ||||
|             m_osSecret = UUID.Random().ToString(); | ||||
| 
 | ||||
|             m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics); | ||||
|             m_periodicDiagnosticsTimer.Enabled = true; | ||||
| 
 | ||||
|             // This thread will go on to become the console listening thread | ||||
|             Thread.CurrentThread.Name = "ConsoleThread"; | ||||
| 
 | ||||
|             ILoggerRepository repository = LogManager.GetRepository(); | ||||
|             IAppender[] appenders = repository.GetAppenders(); | ||||
| 
 | ||||
|             foreach (IAppender appender in appenders) | ||||
|             { | ||||
|                 if (appender.Name == "LogFileAppender") | ||||
|                 { | ||||
|                     m_logFileAppender = appender; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|  | @ -119,77 +87,40 @@ namespace OpenSim.Framework.Servers | |||
|         /// </summary> | ||||
|         protected virtual void StartupSpecific() | ||||
|         { | ||||
|             if (m_console != null) | ||||
|             { | ||||
|                 ILoggerRepository repository = LogManager.GetRepository(); | ||||
|                 IAppender[] appenders = repository.GetAppenders(); | ||||
|             if (m_console == null) | ||||
|                 return; | ||||
| 
 | ||||
|                 foreach (IAppender appender in appenders) | ||||
|                 { | ||||
|                     if (appender.Name == "Console") | ||||
|                     { | ||||
|                         m_consoleAppender = (OpenSimAppender)appender; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             RegisterCommonCommands(); | ||||
|              | ||||
|             m_console.Commands.AddCommand("General", false, "quit", | ||||
|                     "quit", | ||||
|                     "Quit the application", HandleQuit); | ||||
| 
 | ||||
|                 if (null == m_consoleAppender) | ||||
|                 { | ||||
|                     Notice("No appender named Console found (see the log4net config file for this executable)!"); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     m_consoleAppender.Console = m_console; | ||||
|                      | ||||
|                     // If there is no threshold set then the threshold is effectively everything. | ||||
|                     if (null == m_consoleAppender.Threshold) | ||||
|                         m_consoleAppender.Threshold = Level.All; | ||||
|                      | ||||
|                     Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold)); | ||||
|                 } | ||||
|                  | ||||
|                 m_console.Commands.AddCommand("General", false, "quit", | ||||
|                         "quit", | ||||
|                         "Quit the application", HandleQuit); | ||||
|             m_console.Commands.AddCommand("General", false, "shutdown", | ||||
|                     "shutdown", | ||||
|                     "Quit the application", HandleQuit); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "shutdown", | ||||
|                         "shutdown", | ||||
|                         "Quit the application", HandleQuit); | ||||
|             m_console.Commands.AddCommand("General", false, "show threads", | ||||
|                     "show threads", | ||||
|                     "Show thread status", HandleShow); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "set log level", | ||||
|                         "set log level <level>", | ||||
|                         "Set the console logging level", HandleLogLevel); | ||||
|             m_console.Commands.AddCommand("General", false, "show version", | ||||
|                     "show version", | ||||
|                     "Show server version", HandleShow); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "show info", | ||||
|                         "show info", | ||||
|                         "Show general information about the server", HandleShow); | ||||
|             m_console.Commands.AddCommand("General", false, "threads abort", | ||||
|                     "threads abort <thread-id>", | ||||
|                     "Abort a managed thread.  Use \"show threads\" to find possible threads.", HandleThreadsAbort); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "show threads", | ||||
|                         "show threads", | ||||
|                         "Show thread status", HandleShow); | ||||
|             m_console.Commands.AddCommand("General", false, "threads show", | ||||
|                     "threads show", | ||||
|                     "Show thread status.  Synonym for \"show threads\"", | ||||
|                     (string module, string[] args) => Notice(GetThreadsReport())); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "show uptime", | ||||
|                         "show uptime", | ||||
|                         "Show server uptime", HandleShow); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "show version", | ||||
|                         "show version", | ||||
|                         "Show server version", HandleShow); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "threads abort", | ||||
|                         "threads abort <thread-id>", | ||||
|                         "Abort a managed thread.  Use \"show threads\" to find possible threads.", HandleThreadsAbort); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "threads show", | ||||
|                         "threads show", | ||||
|                         "Show thread status.  Synonym for \"show threads\"", | ||||
|                         (string module, string[] args) => Notice(GetThreadsReport())); | ||||
| 
 | ||||
|                 m_console.Commands.AddCommand("General", false, "force gc", | ||||
|                         "force gc", | ||||
|                         "Manually invoke runtime garbage collection.  For debugging purposes", | ||||
|                         HandleForceGc); | ||||
|             } | ||||
|             m_console.Commands.AddCommand("General", false, "force gc", | ||||
|                     "force gc", | ||||
|                     "Manually invoke runtime garbage collection.  For debugging purposes", | ||||
|                     HandleForceGc); | ||||
|         } | ||||
| 
 | ||||
|         private void HandleForceGc(string module, string[] args) | ||||
|  | @ -281,8 +212,6 @@ namespace OpenSim.Framework.Servers | |||
|         public virtual void Startup() | ||||
|         { | ||||
|             m_log.Info("[STARTUP]: Beginning startup processing"); | ||||
| 
 | ||||
|             EnhanceVersionInformation(); | ||||
|              | ||||
|             m_log.Info("[STARTUP]: Careminster version: " + m_version + Environment.NewLine); | ||||
|             // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and | ||||
|  | @ -319,56 +248,10 @@ namespace OpenSim.Framework.Servers | |||
|             Shutdown(); | ||||
|         } | ||||
| 
 | ||||
|         private void HandleLogLevel(string module, string[] cmd) | ||||
|         public override void HandleShow(string module, string[] cmd) | ||||
|         { | ||||
|             if (null == m_consoleAppender) | ||||
|             { | ||||
|                 Notice("No appender named Console found (see the log4net config file for this executable)!"); | ||||
|                 return; | ||||
|             } | ||||
|        | ||||
|             if (cmd.Length > 3) | ||||
|             { | ||||
|                 string rawLevel = cmd[3]; | ||||
|                  | ||||
|                 ILoggerRepository repository = LogManager.GetRepository(); | ||||
|                 Level consoleLevel = repository.LevelMap[rawLevel]; | ||||
|                  | ||||
|                 if (consoleLevel != null) | ||||
|                     m_consoleAppender.Threshold = consoleLevel; | ||||
|                 else | ||||
|                     Notice( | ||||
|                         String.Format( | ||||
|                             "{0} is not a valid logging level.  Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF", | ||||
|                             rawLevel)); | ||||
|             } | ||||
|             base.HandleShow(module, cmd); | ||||
| 
 | ||||
|             Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold)); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Show help information | ||||
|         /// </summary> | ||||
|         /// <param name="helpArgs"></param> | ||||
|         protected virtual void ShowHelp(string[] helpArgs) | ||||
|         { | ||||
|             Notice(""); | ||||
|              | ||||
|             if (helpArgs.Length == 0) | ||||
|             { | ||||
|                 Notice("set log level [level] - change the console logging level only.  For example, off or debug."); | ||||
|                 Notice("show info - show server information (e.g. startup path)."); | ||||
|                 Notice("show threads - list tracked threads"); | ||||
|                 Notice("show uptime - show server startup time and uptime."); | ||||
|                 Notice("show version - show server version."); | ||||
|                 Notice(""); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public virtual void HandleShow(string module, string[] cmd) | ||||
|         { | ||||
|             List<string> args = new List<string>(cmd); | ||||
| 
 | ||||
|             args.RemoveAt(0); | ||||
|  | @ -377,18 +260,10 @@ namespace OpenSim.Framework.Servers | |||
| 
 | ||||
|             switch (showParams[0]) | ||||
|             { | ||||
|                 case "info": | ||||
|                     ShowInfo(); | ||||
|                     break; | ||||
| 
 | ||||
|                 case "threads": | ||||
|                     Notice(GetThreadsReport()); | ||||
|                     break; | ||||
| 
 | ||||
|                 case "uptime": | ||||
|                     Notice(GetUptimeReport()); | ||||
|                     break; | ||||
| 
 | ||||
|                 case "version": | ||||
|                     Notice(GetVersionText()); | ||||
|                     break; | ||||
|  | @ -414,160 +289,7 @@ namespace OpenSim.Framework.Servers | |||
|                 MainConsole.Instance.OutputFormat("Aborted thread with id {0}", threadId); | ||||
|             else | ||||
|                 MainConsole.Instance.OutputFormat("ERROR - Thread with id {0} not found in managed threads", threadId); | ||||
|         } | ||||
|          | ||||
|         protected void ShowInfo() | ||||
|         { | ||||
|             Notice(GetVersionText()); | ||||
|             Notice("Startup directory: " + m_startupDirectory);                 | ||||
|             if (null != m_consoleAppender) | ||||
|                 Notice(String.Format("Console log level: {0}", m_consoleAppender.Threshold));               | ||||
|         } | ||||
|          | ||||
|         protected string GetVersionText() | ||||
|         { | ||||
|             return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Console output is only possible if a console has been established. | ||||
|         /// That is something that cannot be determined within this class. So | ||||
|         /// all attempts to use the console MUST be verified. | ||||
|         /// </summary> | ||||
|         /// <param name="msg"></param> | ||||
|         protected void Notice(string msg) | ||||
|         { | ||||
|             if (m_console != null) | ||||
|             { | ||||
|                 m_console.Output(msg); | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|         /// Console output is only possible if a console has been established. | ||||
|         /// That is something that cannot be determined within this class. So | ||||
|         /// all attempts to use the console MUST be verified. | ||||
|         /// </summary> | ||||
|         /// <param name="format"></param>         | ||||
|         /// <param name="components"></param> | ||||
|         protected void Notice(string format, params string[] components) | ||||
|         { | ||||
|             if (m_console != null) | ||||
|                 m_console.OutputFormat(format, components); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Enhance the version string with extra information if it's available. | ||||
|         /// </summary> | ||||
|         protected void EnhanceVersionInformation() | ||||
|         { | ||||
|             string buildVersion = string.Empty; | ||||
| 
 | ||||
|             // The subversion information is deprecated and will be removed at a later date | ||||
|             // Add subversion revision information if available | ||||
|             // Try file "svn_revision" in the current directory first, then the .svn info. | ||||
|             // This allows to make the revision available in simulators not running from the source tree. | ||||
|             // FIXME: Making an assumption about the directory we're currently in - we do this all over the place | ||||
|             // elsewhere as well | ||||
|             string gitDir = "../.git/"; | ||||
|             string gitRefPointerPath = gitDir + "HEAD"; | ||||
| 
 | ||||
|             string svnRevisionFileName = "svn_revision"; | ||||
|             string svnFileName = ".svn/entries"; | ||||
|             string manualVersionFileName = ".version"; | ||||
|             string inputLine; | ||||
|             int strcmp; | ||||
| 
 | ||||
|             if (File.Exists(manualVersionFileName)) | ||||
|             { | ||||
|                 using (StreamReader CommitFile = File.OpenText(manualVersionFileName)) | ||||
|                     buildVersion = CommitFile.ReadLine(); | ||||
| 
 | ||||
|                 m_version += buildVersion ?? ""; | ||||
|             } | ||||
|             else if (File.Exists(gitRefPointerPath)) | ||||
|             { | ||||
| //                m_log.DebugFormat("[OPENSIM]: Found {0}", gitRefPointerPath); | ||||
| 
 | ||||
|                 string rawPointer = ""; | ||||
| 
 | ||||
|                 using (StreamReader pointerFile = File.OpenText(gitRefPointerPath)) | ||||
|                     rawPointer = pointerFile.ReadLine(); | ||||
| 
 | ||||
| //                m_log.DebugFormat("[OPENSIM]: rawPointer [{0}]", rawPointer); | ||||
| 
 | ||||
|                 Match m = Regex.Match(rawPointer, "^ref: (.+)$"); | ||||
| 
 | ||||
|                 if (m.Success) | ||||
|                 { | ||||
| //                    m_log.DebugFormat("[OPENSIM]: Matched [{0}]", m.Groups[1].Value); | ||||
| 
 | ||||
|                     string gitRef = m.Groups[1].Value; | ||||
|                     string gitRefPath = gitDir + gitRef; | ||||
|                     if (File.Exists(gitRefPath)) | ||||
|                     { | ||||
| //                        m_log.DebugFormat("[OPENSIM]: Found gitRefPath [{0}]", gitRefPath); | ||||
| 
 | ||||
|                         using (StreamReader refFile = File.OpenText(gitRefPath)) | ||||
|                         { | ||||
|                             string gitHash = refFile.ReadLine(); | ||||
|                             m_version += gitHash.Substring(0, 7); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // Remove the else logic when subversion mirror is no longer used | ||||
|                 if (File.Exists(svnRevisionFileName)) | ||||
|                 { | ||||
|                     StreamReader RevisionFile = File.OpenText(svnRevisionFileName); | ||||
|                     buildVersion = RevisionFile.ReadLine(); | ||||
|                     buildVersion.Trim(); | ||||
|                     RevisionFile.Close(); | ||||
|                 } | ||||
| 
 | ||||
|                 if (string.IsNullOrEmpty(buildVersion) && File.Exists(svnFileName)) | ||||
|                 { | ||||
|                     StreamReader EntriesFile = File.OpenText(svnFileName); | ||||
|                     inputLine = EntriesFile.ReadLine(); | ||||
|                     while (inputLine != null) | ||||
|                     { | ||||
|                         // using the dir svn revision at the top of entries file | ||||
|                         strcmp = String.Compare(inputLine, "dir"); | ||||
|                         if (strcmp == 0) | ||||
|                        { | ||||
|                             buildVersion = EntriesFile.ReadLine(); | ||||
|                             break; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             inputLine = EntriesFile.ReadLine(); | ||||
|                         } | ||||
|                     } | ||||
|                     EntriesFile.Close(); | ||||
|                 } | ||||
| 
 | ||||
|                 m_version += string.IsNullOrEmpty(buildVersion) ? "      " : ("." + buildVersion + "     ").Substring(0, 6); | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         protected void CreatePIDFile(string path) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); | ||||
|                 FileStream fs = File.Create(path); | ||||
| 
 | ||||
|                 Byte[] buf = Encoding.ASCII.GetBytes(pidstring); | ||||
|                 fs.Write(buf, 0, buf.Length); | ||||
|                 fs.Close(); | ||||
|                 m_pidFile = path; | ||||
|             } | ||||
|             catch (Exception) | ||||
|             { | ||||
|             } | ||||
|         } | ||||
|         }        | ||||
|          | ||||
|         public string osSecret { | ||||
|             // Secret uuid for the simulator | ||||
|  | @ -586,20 +308,5 @@ namespace OpenSim.Framework.Servers | |||
|                 return StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version); | ||||
|             } | ||||
|         } | ||||
|             | ||||
|         protected void RemovePIDFile() | ||||
|         { | ||||
|             if (m_pidFile != String.Empty) | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     File.Delete(m_pidFile); | ||||
|                     m_pidFile = String.Empty; | ||||
|                 } | ||||
|                 catch (Exception) | ||||
|                 { | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  | @ -26,20 +26,392 @@ | |||
|  */ | ||||
| 
 | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Reflection; | ||||
| using System.Text; | ||||
| using System.Text.RegularExpressions; | ||||
| using log4net; | ||||
| using log4net.Appender; | ||||
| using log4net.Core; | ||||
| using log4net.Repository; | ||||
| using Nini.Config; | ||||
| using OpenSim.Framework.Console; | ||||
| 
 | ||||
| namespace OpenSim.Framework.Servers | ||||
| { | ||||
|     public class ServerBase | ||||
|     { | ||||
|         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
| 
 | ||||
|         public IConfigSource Config { get; protected set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Time at which this server was started | ||||
|         /// Console to be used for any command line output.  Can be null, in which case there should be no output. | ||||
|         /// </summary> | ||||
|         protected ICommandConsole m_console; | ||||
| 
 | ||||
|         protected OpenSimAppender m_consoleAppender; | ||||
|         protected FileAppender m_logFileAppender;  | ||||
| 
 | ||||
|         protected DateTime m_startuptime; | ||||
|         protected string m_startupDirectory = Environment.CurrentDirectory; | ||||
| 
 | ||||
|         protected string m_pidFile = String.Empty; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Server version information.  Usually VersionInfo + information about git commit, operating system, etc. | ||||
|         /// </summary> | ||||
|         protected string m_version; | ||||
| 
 | ||||
|         public ServerBase() | ||||
|         { | ||||
|             m_startuptime = DateTime.Now; | ||||
|             m_version = VersionInfo.Version; | ||||
|             EnhanceVersionInformation(); | ||||
|         } | ||||
| 
 | ||||
|         protected void CreatePIDFile(string path) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); | ||||
| 
 | ||||
|                 using (FileStream fs = File.Create(path)) | ||||
|                 { | ||||
|                     Byte[] buf = Encoding.ASCII.GetBytes(pidstring); | ||||
|                     fs.Write(buf, 0, buf.Length); | ||||
|                 } | ||||
| 
 | ||||
|                 m_pidFile = path; | ||||
| 
 | ||||
|                 m_log.InfoFormat("[SERVER BASE]: Created pid file {0}", m_pidFile); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 m_log.Warn(string.Format("[SERVER BASE]: Could not create PID file at {0} ", path), e); | ||||
|             } | ||||
|         } | ||||
|             | ||||
|         protected void RemovePIDFile() | ||||
|         { | ||||
|             if (m_pidFile != String.Empty) | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     File.Delete(m_pidFile); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.Error(string.Format("[SERVER BASE]: Error whilst removing {0} ", m_pidFile), e); | ||||
|                 } | ||||
| 
 | ||||
|                 m_pidFile = String.Empty; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void RegisterCommonAppenders(IConfig startupConfig) | ||||
|         { | ||||
|             ILoggerRepository repository = LogManager.GetRepository(); | ||||
|             IAppender[] appenders = repository.GetAppenders(); | ||||
| 
 | ||||
|             foreach (IAppender appender in appenders) | ||||
|             { | ||||
|                 if (appender.Name == "Console") | ||||
|                 { | ||||
|                     m_consoleAppender = (OpenSimAppender)appender; | ||||
|                 } | ||||
|                 else if (appender.Name == "LogFileAppender") | ||||
|                 { | ||||
|                     m_logFileAppender = (FileAppender)appender; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (null == m_consoleAppender) | ||||
|             { | ||||
|                 Notice("No appender named Console found (see the log4net config file for this executable)!"); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // FIXME: This should be done through an interface rather than casting. | ||||
|                 m_consoleAppender.Console = (ConsoleBase)m_console; | ||||
|                  | ||||
|                 // If there is no threshold set then the threshold is effectively everything. | ||||
|                 if (null == m_consoleAppender.Threshold) | ||||
|                     m_consoleAppender.Threshold = Level.All; | ||||
|                  | ||||
|                 Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold)); | ||||
|             } | ||||
| 
 | ||||
|             if (m_logFileAppender != null && startupConfig != null) | ||||
|             { | ||||
|                 string cfgFileName = startupConfig.GetString("LogFile", null); | ||||
|                 if (cfgFileName != null) | ||||
|                 { | ||||
|                     m_logFileAppender.File = cfgFileName; | ||||
|                     m_logFileAppender.ActivateOptions(); | ||||
|                 } | ||||
| 
 | ||||
|                 m_log.InfoFormat("[SERVER BASE]: Logging started to file {0}", m_logFileAppender.File); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Register common commands once m_console has been set if it is going to be set | ||||
|         /// </summary> | ||||
|         public void RegisterCommonCommands() | ||||
|         { | ||||
|             if (m_console == null) | ||||
|                 return; | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "show info", "show info", "Show general information about the server", HandleShow); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "show uptime", "show uptime", "Show server uptime", HandleShow); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "get log level", "get log level", "Get the current console logging level",  | ||||
|                 (mod, cmd) => ShowLogLevel()); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "set log level", "set log level <level>",  | ||||
|                 "Set the console logging level for this session.", HandleSetLogLevel); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "config set", | ||||
|                 "config set <section> <key> <value>", | ||||
|                 "Set a config option.  In most cases this is not useful since changed parameters are not dynamically reloaded.  Neither do changed parameters persist - you will have to change a config file manually and restart.", HandleConfig); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "config get", | ||||
|                 "config get [<section>] [<key>]", | ||||
|                 "Synonym for config show", | ||||
|                 HandleConfig); | ||||
|              | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "config show", | ||||
|                 "config show [<section>] [<key>]", | ||||
|                 "Show config information",  | ||||
|                 "If neither section nor field are specified, then the whole current configuration is printed." + Environment.NewLine | ||||
|                 + "If a section is given but not a field, then all fields in that section are printed.", | ||||
|                 HandleConfig);             | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "config save", | ||||
|                 "config save <path>", | ||||
|                 "Save current configuration to a file at the given path", HandleConfig); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand( | ||||
|                 "General", false, "command-script", | ||||
|                 "command-script <script>", | ||||
|                 "Run a command script from file", HandleScript); | ||||
|         } | ||||
| 
 | ||||
|         public virtual void HandleShow(string module, string[] cmd) | ||||
|         { | ||||
|             List<string> args = new List<string>(cmd); | ||||
| 
 | ||||
|             args.RemoveAt(0); | ||||
| 
 | ||||
|             string[] showParams = args.ToArray(); | ||||
| 
 | ||||
|             switch (showParams[0]) | ||||
|             { | ||||
|                 case "info": | ||||
|                     ShowInfo(); | ||||
|                     break; | ||||
| 
 | ||||
|                 case "uptime": | ||||
|                     Notice(GetUptimeReport()); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Change and load configuration file data. | ||||
|         /// </summary> | ||||
|         /// <param name="module"></param> | ||||
|         /// <param name="cmd"></param> | ||||
|         private void HandleConfig(string module, string[] cmd) | ||||
|         { | ||||
|             List<string> args = new List<string>(cmd); | ||||
|             args.RemoveAt(0); | ||||
|             string[] cmdparams = args.ToArray(); | ||||
| 
 | ||||
|             if (cmdparams.Length > 0) | ||||
|             { | ||||
|                 string firstParam = cmdparams[0].ToLower(); | ||||
|                  | ||||
|                 switch (firstParam) | ||||
|                 { | ||||
|                     case "set": | ||||
|                         if (cmdparams.Length < 4) | ||||
|                         { | ||||
|                             Notice("Syntax: config set <section> <key> <value>"); | ||||
|                             Notice("Example: config set ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             IConfig c; | ||||
|                             IConfigSource source = new IniConfigSource(); | ||||
|                             c = source.AddConfig(cmdparams[1]); | ||||
|                             if (c != null) | ||||
|                             { | ||||
|                                 string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); | ||||
|                                 c.Set(cmdparams[2], _value); | ||||
|                                 Config.Merge(source); | ||||
| 
 | ||||
|                                 Notice("In section [{0}], set {1} = {2}", c.Name, cmdparams[2], _value); | ||||
|                             } | ||||
|                         } | ||||
|                         break; | ||||
| 
 | ||||
|                     case "get": | ||||
|                     case "show": | ||||
|                         if (cmdparams.Length == 1) | ||||
|                         { | ||||
|                             foreach (IConfig config in Config.Configs) | ||||
|                             { | ||||
|                                 Notice("[{0}]", config.Name); | ||||
|                                 string[] keys = config.GetKeys(); | ||||
|                                 foreach (string key in keys) | ||||
|                                     Notice("  {0} = {1}", key, config.GetString(key)); | ||||
|                             } | ||||
|                         } | ||||
|                         else if (cmdparams.Length == 2 || cmdparams.Length == 3) | ||||
|                         { | ||||
|                             IConfig config = Config.Configs[cmdparams[1]]; | ||||
|                             if (config == null) | ||||
|                             { | ||||
|                                 Notice("Section \"{0}\" does not exist.",cmdparams[1]); | ||||
|                                 break; | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 if (cmdparams.Length == 2) | ||||
|                                 { | ||||
|                                     Notice("[{0}]", config.Name); | ||||
|                                     foreach (string key in config.GetKeys()) | ||||
|                                         Notice("  {0} = {1}", key, config.GetString(key));                                 | ||||
|                                 } | ||||
|                                 else | ||||
|                                 { | ||||
|                                     Notice( | ||||
|                                         "config get {0} {1} : {2}",  | ||||
|                                         cmdparams[1], cmdparams[2], config.GetString(cmdparams[2])); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             Notice("Syntax: config {0} [<section>] [<key>]", firstParam); | ||||
|                             Notice("Example: config {0} ScriptEngine.DotNetEngine NumberOfScriptThreads", firstParam); | ||||
|                         } | ||||
| 
 | ||||
|                         break; | ||||
| 
 | ||||
|                     case "save": | ||||
|                         if (cmdparams.Length < 2) | ||||
|                         { | ||||
|                             Notice("Syntax: config save <path>"); | ||||
|                             return; | ||||
|                         } | ||||
| 
 | ||||
|                         string path = cmdparams[1]; | ||||
|                         Notice("Saving configuration file: {0}", path); | ||||
| 
 | ||||
|                         if (Config is IniConfigSource) | ||||
|                         { | ||||
|                             IniConfigSource iniCon = (IniConfigSource)Config; | ||||
|                             iniCon.Save(path); | ||||
|                         } | ||||
|                         else if (Config is XmlConfigSource) | ||||
|                         { | ||||
|                             XmlConfigSource xmlCon = (XmlConfigSource)Config; | ||||
|                             xmlCon.Save(path); | ||||
|                         } | ||||
| 
 | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void HandleSetLogLevel(string module, string[] cmd) | ||||
|         { | ||||
|             if (cmd.Length != 4) | ||||
|             { | ||||
|                 Notice("Usage: set log level <level>"); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             if (null == m_consoleAppender) | ||||
|             { | ||||
|                 Notice("No appender named Console found (see the log4net config file for this executable)!"); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             string rawLevel = cmd[3]; | ||||
|              | ||||
|             ILoggerRepository repository = LogManager.GetRepository(); | ||||
|             Level consoleLevel = repository.LevelMap[rawLevel]; | ||||
|              | ||||
|             if (consoleLevel != null) | ||||
|                 m_consoleAppender.Threshold = consoleLevel; | ||||
|             else | ||||
|                 Notice( | ||||
|                     "{0} is not a valid logging level.  Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF", | ||||
|                     rawLevel); | ||||
| 
 | ||||
|             ShowLogLevel(); | ||||
|         } | ||||
| 
 | ||||
|         private void ShowLogLevel() | ||||
|         { | ||||
|             Notice("Console log level is {0}", m_consoleAppender.Threshold); | ||||
|         } | ||||
| 
 | ||||
|         protected virtual void HandleScript(string module, string[] parms) | ||||
|         { | ||||
|             if (parms.Length != 2) | ||||
|             { | ||||
|                 Notice("Usage: command-script <path-to-script"); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             RunCommandScript(parms[1]); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Run an optional startup list of commands | ||||
|         /// </summary> | ||||
|         /// <param name="fileName"></param> | ||||
|         protected void RunCommandScript(string fileName) | ||||
|         { | ||||
|             if (m_console == null) | ||||
|                 return; | ||||
| 
 | ||||
|             if (File.Exists(fileName)) | ||||
|             { | ||||
|                 m_log.Info("[SERVER BASE]: Running " + fileName); | ||||
| 
 | ||||
|                 using (StreamReader readFile = File.OpenText(fileName)) | ||||
|                 { | ||||
|                     string currentCommand; | ||||
|                     while ((currentCommand = readFile.ReadLine()) != null) | ||||
|                     { | ||||
|                         currentCommand = currentCommand.Trim(); | ||||
|                         if (!(currentCommand == "" | ||||
|                             || currentCommand.StartsWith(";") | ||||
|                             || currentCommand.StartsWith("//") | ||||
|                             || currentCommand.StartsWith("#"))) | ||||
|                         { | ||||
|                             m_log.Info("[SERVER BASE]: Running '" + currentCommand + "'"); | ||||
|                             m_console.RunCommand(currentCommand); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -54,5 +426,141 @@ namespace OpenSim.Framework.Servers | |||
| 
 | ||||
|             return sb.ToString(); | ||||
|         } | ||||
| 
 | ||||
|         protected void ShowInfo() | ||||
|         { | ||||
|             Notice(GetVersionText()); | ||||
|             Notice("Startup directory: " + m_startupDirectory);                 | ||||
|             if (null != m_consoleAppender) | ||||
|                 Notice(String.Format("Console log level: {0}", m_consoleAppender.Threshold));               | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Enhance the version string with extra information if it's available. | ||||
|         /// </summary> | ||||
|         protected void EnhanceVersionInformation() | ||||
|         { | ||||
|             string buildVersion = string.Empty; | ||||
| 
 | ||||
|             // The subversion information is deprecated and will be removed at a later date | ||||
|             // Add subversion revision information if available | ||||
|             // Try file "svn_revision" in the current directory first, then the .svn info. | ||||
|             // This allows to make the revision available in simulators not running from the source tree. | ||||
|             // FIXME: Making an assumption about the directory we're currently in - we do this all over the place | ||||
|             // elsewhere as well | ||||
|             string gitDir = "../.git/"; | ||||
|             string gitRefPointerPath = gitDir + "HEAD"; | ||||
| 
 | ||||
|             string svnRevisionFileName = "svn_revision"; | ||||
|             string svnFileName = ".svn/entries"; | ||||
|             string manualVersionFileName = ".version"; | ||||
|             string inputLine; | ||||
|             int strcmp; | ||||
| 
 | ||||
|             if (File.Exists(manualVersionFileName)) | ||||
|             { | ||||
|                 using (StreamReader CommitFile = File.OpenText(manualVersionFileName)) | ||||
|                     buildVersion = CommitFile.ReadLine(); | ||||
| 
 | ||||
|                 m_version += buildVersion ?? ""; | ||||
|             } | ||||
|             else if (File.Exists(gitRefPointerPath)) | ||||
|             { | ||||
| //                m_log.DebugFormat("[SERVER BASE]: Found {0}", gitRefPointerPath); | ||||
| 
 | ||||
|                 string rawPointer = ""; | ||||
| 
 | ||||
|                 using (StreamReader pointerFile = File.OpenText(gitRefPointerPath)) | ||||
|                     rawPointer = pointerFile.ReadLine(); | ||||
| 
 | ||||
| //                m_log.DebugFormat("[SERVER BASE]: rawPointer [{0}]", rawPointer); | ||||
| 
 | ||||
|                 Match m = Regex.Match(rawPointer, "^ref: (.+)$"); | ||||
| 
 | ||||
|                 if (m.Success) | ||||
|                 { | ||||
| //                    m_log.DebugFormat("[SERVER BASE]: Matched [{0}]", m.Groups[1].Value); | ||||
| 
 | ||||
|                     string gitRef = m.Groups[1].Value; | ||||
|                     string gitRefPath = gitDir + gitRef; | ||||
|                     if (File.Exists(gitRefPath)) | ||||
|                     { | ||||
| //                        m_log.DebugFormat("[SERVER BASE]: Found gitRefPath [{0}]", gitRefPath); | ||||
| 
 | ||||
|                         using (StreamReader refFile = File.OpenText(gitRefPath)) | ||||
|                         { | ||||
|                             string gitHash = refFile.ReadLine(); | ||||
|                             m_version += gitHash.Substring(0, 7); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // Remove the else logic when subversion mirror is no longer used | ||||
|                 if (File.Exists(svnRevisionFileName)) | ||||
|                 { | ||||
|                     StreamReader RevisionFile = File.OpenText(svnRevisionFileName); | ||||
|                     buildVersion = RevisionFile.ReadLine(); | ||||
|                     buildVersion.Trim(); | ||||
|                     RevisionFile.Close(); | ||||
|                 } | ||||
| 
 | ||||
|                 if (string.IsNullOrEmpty(buildVersion) && File.Exists(svnFileName)) | ||||
|                 { | ||||
|                     StreamReader EntriesFile = File.OpenText(svnFileName); | ||||
|                     inputLine = EntriesFile.ReadLine(); | ||||
|                     while (inputLine != null) | ||||
|                     { | ||||
|                         // using the dir svn revision at the top of entries file | ||||
|                         strcmp = String.Compare(inputLine, "dir"); | ||||
|                         if (strcmp == 0) | ||||
|                        { | ||||
|                             buildVersion = EntriesFile.ReadLine(); | ||||
|                             break; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             inputLine = EntriesFile.ReadLine(); | ||||
|                         } | ||||
|                     } | ||||
|                     EntriesFile.Close(); | ||||
|                 } | ||||
| 
 | ||||
|                 m_version += string.IsNullOrEmpty(buildVersion) ? "      " : ("." + buildVersion + "     ").Substring(0, 6); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         protected string GetVersionText() | ||||
|         { | ||||
|             return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Console output is only possible if a console has been established. | ||||
|         /// That is something that cannot be determined within this class. So | ||||
|         /// all attempts to use the console MUST be verified. | ||||
|         /// </summary> | ||||
|         /// <param name="msg"></param> | ||||
|         protected void Notice(string msg) | ||||
|         { | ||||
|             if (m_console != null) | ||||
|             { | ||||
|                 m_console.Output(msg); | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|         /// Console output is only possible if a console has been established. | ||||
|         /// That is something that cannot be determined within this class. So | ||||
|         /// all attempts to use the console MUST be verified. | ||||
|         /// </summary> | ||||
|         /// <param name="format"></param>         | ||||
|         /// <param name="components"></param> | ||||
|         protected void Notice(string format, params object[] components) | ||||
|         { | ||||
|             if (m_console != null) | ||||
|                 m_console.OutputFormat(format, components); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -188,7 +188,6 @@ namespace OpenSim | |||
|             // Make sure command line options take precedence | ||||
|             m_config.Source.Merge(argvSource); | ||||
| 
 | ||||
| 
 | ||||
|             IConfig enVars = m_config.Source.Configs["Environment"]; | ||||
| 
 | ||||
|             if( enVars != null ) | ||||
|  |  | |||
|  | @ -82,8 +82,8 @@ namespace OpenSim | |||
|         { | ||||
|             base.ReadExtraConfigSettings(); | ||||
| 
 | ||||
|             IConfig startupConfig = m_config.Source.Configs["Startup"]; | ||||
|             IConfig networkConfig = m_config.Source.Configs["Network"]; | ||||
|             IConfig startupConfig = Config.Configs["Startup"]; | ||||
|             IConfig networkConfig = Config.Configs["Network"]; | ||||
| 
 | ||||
|             int stpMaxThreads = 15; | ||||
| 
 | ||||
|  | @ -106,22 +106,6 @@ namespace OpenSim | |||
|                     m_timeInterval = startupConfig.GetInt("timer_Interval", 1200); | ||||
|                 } | ||||
| 
 | ||||
|                 if (m_logFileAppender != null) | ||||
|                 { | ||||
|                     if (m_logFileAppender is log4net.Appender.FileAppender) | ||||
|                     { | ||||
|                         log4net.Appender.FileAppender appender = | ||||
|                                 (log4net.Appender.FileAppender)m_logFileAppender; | ||||
|                         string fileName = startupConfig.GetString("LogFile", String.Empty); | ||||
|                         if (fileName != String.Empty) | ||||
|                         { | ||||
|                             appender.File = fileName; | ||||
|                             appender.ActivateOptions(); | ||||
|                         } | ||||
|                         m_log.InfoFormat("[LOGGING]: Logging started to file {0}", appender.File); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 string asyncCallMethodStr = startupConfig.GetString("async_call_method", String.Empty); | ||||
|                 FireAndForgetMethod asyncCallMethod; | ||||
|                 if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) | ||||
|  | @ -164,7 +148,7 @@ namespace OpenSim | |||
|                     break; | ||||
|                 case "rest": | ||||
|                     m_console = new RemoteConsole("Region"); | ||||
|                     ((RemoteConsole)m_console).ReadConfig(m_config.Source); | ||||
|                     ((RemoteConsole)m_console).ReadConfig(Config); | ||||
|                     break; | ||||
|                 default: | ||||
|                     m_console = new LocalConsole("Region"); | ||||
|  | @ -174,6 +158,7 @@ namespace OpenSim | |||
| 
 | ||||
|             MainConsole.Instance = m_console; | ||||
| 
 | ||||
|             RegisterCommonAppenders(Config.Configs["Startup"]); | ||||
|             RegisterConsoleCommands(); | ||||
| 
 | ||||
|             base.StartupSpecific(); | ||||
|  | @ -372,26 +357,6 @@ namespace OpenSim | |||
|                                           "restart", | ||||
|                                           "Restart all sims in this instance", RunCommand); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand("General", false, "config set", | ||||
|                                           "config set <section> <key> <value>", | ||||
|                                           "Set a config option.  In most cases this is not useful since changed parameters are not dynamically reloaded.  Neither do changed parameters persist - you will have to change a config file manually and restart.", HandleConfig); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand("General", false, "config get", | ||||
|                                           "config get [<section>] [<key>]", | ||||
|                                           "Synonym for config show", | ||||
|                                           HandleConfig); | ||||
|              | ||||
|             m_console.Commands.AddCommand("General", false, "config show", | ||||
|                                           "config show [<section>] [<key>]", | ||||
|                                           "Show config information",  | ||||
|                                           "If neither section nor field are specified, then the whole current configuration is printed." + Environment.NewLine | ||||
|                                           + "If a section is given but not a field, then all fields in that section are printed.", | ||||
|                                           HandleConfig);             | ||||
| 
 | ||||
|             m_console.Commands.AddCommand("General", false, "config save", | ||||
|                                           "config save <path>", | ||||
|                                           "Save current configuration to a file at the given path", HandleConfig); | ||||
| 
 | ||||
|             m_console.Commands.AddCommand("General", false, "command-script", | ||||
|                                           "command-script <script>", | ||||
|                                           "Run a command script from file", RunCommand); | ||||
|  | @ -501,35 +466,6 @@ namespace OpenSim | |||
|             MainConsole.Instance.Output(""); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Run an optional startup list of commands | ||||
|         /// </summary> | ||||
|         /// <param name="fileName"></param> | ||||
|         private void RunCommandScript(string fileName) | ||||
|         { | ||||
|             if (File.Exists(fileName)) | ||||
|             { | ||||
|                 m_log.Info("[COMMANDFILE]: Running " + fileName); | ||||
| 
 | ||||
|                 using (StreamReader readFile = File.OpenText(fileName)) | ||||
|                 { | ||||
|                     string currentCommand; | ||||
|                     while ((currentCommand = readFile.ReadLine()) != null) | ||||
|                     { | ||||
|                         currentCommand = currentCommand.Trim(); | ||||
|                         if (!(currentCommand == "" | ||||
|                             || currentCommand.StartsWith(";") | ||||
|                             || currentCommand.StartsWith("//") | ||||
|                             || currentCommand.StartsWith("#"))) | ||||
|                         { | ||||
|                             m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'"); | ||||
|                             m_console.RunCommand(currentCommand); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Opens a file and uses it as input to the console command parser. | ||||
|         /// </summary> | ||||
|  | @ -634,111 +570,9 @@ namespace OpenSim | |||
|             bool changed = PopulateRegionEstateInfo(regInfo); | ||||
|             IScene scene; | ||||
|             CreateRegion(regInfo, true, out scene); | ||||
| 
 | ||||
|             if (changed) | ||||
| 	      regInfo.EstateSettings.Save(); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Change and load configuration file data. | ||||
|         /// </summary> | ||||
|         /// <param name="module"></param> | ||||
|         /// <param name="cmd"></param> | ||||
|         private void HandleConfig(string module, string[] cmd) | ||||
|         { | ||||
|             List<string> args = new List<string>(cmd); | ||||
|             args.RemoveAt(0); | ||||
|             string[] cmdparams = args.ToArray(); | ||||
| 
 | ||||
|             if (cmdparams.Length > 0) | ||||
|             { | ||||
|                 string firstParam = cmdparams[0].ToLower(); | ||||
|                  | ||||
|                 switch (firstParam) | ||||
|                 { | ||||
|                     case "set": | ||||
|                         if (cmdparams.Length < 4) | ||||
|                         { | ||||
|                             Notice("Syntax: config set <section> <key> <value>"); | ||||
|                             Notice("Example: config set ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             IConfig c; | ||||
|                             IConfigSource source = new IniConfigSource(); | ||||
|                             c = source.AddConfig(cmdparams[1]); | ||||
|                             if (c != null) | ||||
|                             { | ||||
|                                 string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); | ||||
|                                 c.Set(cmdparams[2], _value); | ||||
|                                 m_config.Source.Merge(source); | ||||
| 
 | ||||
|                                 Notice("In section [{0}], set {1} = {2}", c.Name, cmdparams[2], _value); | ||||
|                             } | ||||
|                         } | ||||
|                         break; | ||||
| 
 | ||||
|                     case "get": | ||||
|                     case "show": | ||||
|                         if (cmdparams.Length == 1) | ||||
|                         { | ||||
|                             foreach (IConfig config in m_config.Source.Configs) | ||||
|                             { | ||||
|                                 Notice("[{0}]", config.Name); | ||||
|                                 string[] keys = config.GetKeys(); | ||||
|                                 foreach (string key in keys) | ||||
|                                     Notice("  {0} = {1}", key, config.GetString(key)); | ||||
|                             } | ||||
|                         } | ||||
|                         else if (cmdparams.Length == 2 || cmdparams.Length == 3) | ||||
|                         { | ||||
|                             IConfig config = m_config.Source.Configs[cmdparams[1]]; | ||||
|                             if (config == null) | ||||
|                             { | ||||
|                                 Notice("Section \"{0}\" does not exist.",cmdparams[1]); | ||||
|                                 break; | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 if (cmdparams.Length == 2) | ||||
|                                 { | ||||
|                                     Notice("[{0}]", config.Name); | ||||
|                                     foreach (string key in config.GetKeys()) | ||||
|                                         Notice("  {0} = {1}", key, config.GetString(key));                                 | ||||
|                                 } | ||||
|                                 else | ||||
|                                 { | ||||
|                                     Notice( | ||||
|                                         "config get {0} {1} : {2}",  | ||||
|                                         cmdparams[1], cmdparams[2], config.GetString(cmdparams[2])); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             Notice("Syntax: config {0} [<section>] [<key>]", firstParam); | ||||
|                             Notice("Example: config {0} ScriptEngine.DotNetEngine NumberOfScriptThreads", firstParam); | ||||
|                         } | ||||
| 
 | ||||
|                         break; | ||||
| 
 | ||||
|                     case "save": | ||||
|                         if (cmdparams.Length < 2) | ||||
|                         { | ||||
|                             Notice("Syntax: config save <path>"); | ||||
|                             return; | ||||
|                         } | ||||
| 
 | ||||
|                         if (Application.iniFilePath == cmdparams[1]) | ||||
|                         { | ||||
|                             Notice("Path can not be " + Application.iniFilePath); | ||||
|                             return; | ||||
|                         } | ||||
| 
 | ||||
|                         Notice("Saving configuration file: " + cmdparams[1]); | ||||
|                         m_config.Save(cmdparams[1]); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
| 	            regInfo.EstateSettings.Save(); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -787,13 +621,6 @@ namespace OpenSim | |||
| 
 | ||||
|             switch (command) | ||||
|             { | ||||
|                 case "command-script": | ||||
|                     if (cmdparams.Length > 0) | ||||
|                     { | ||||
|                         RunCommandScript(cmdparams[0]); | ||||
|                     } | ||||
|                     break; | ||||
| 
 | ||||
|                 case "backup": | ||||
|                     MainConsole.Instance.Output("Triggering save of pending object updates to persistent store"); | ||||
|                     SceneManager.BackupCurrentScene(); | ||||
|  |  | |||
|  | @ -104,13 +104,7 @@ namespace OpenSim | |||
|         /// <value> | ||||
|         /// The config information passed into the OpenSimulator region server. | ||||
|         /// </value> | ||||
|         public OpenSimConfigSource ConfigSource | ||||
|         { | ||||
|             get { return m_config; } | ||||
|             set { m_config = value; } | ||||
|         } | ||||
| 
 | ||||
|         protected OpenSimConfigSource m_config; | ||||
|         public OpenSimConfigSource ConfigSource { get; private set; } | ||||
| 
 | ||||
|         public List<IClientNetworkServer> ClientServers | ||||
|         { | ||||
|  | @ -150,13 +144,14 @@ namespace OpenSim | |||
|         protected virtual void LoadConfigSettings(IConfigSource configSource) | ||||
|         { | ||||
|             m_configLoader = new ConfigurationLoader(); | ||||
|             m_config = m_configLoader.LoadConfigSettings(configSource, envConfigSource, out m_configSettings, out m_networkServersInfo); | ||||
|             ConfigSource = m_configLoader.LoadConfigSettings(configSource, envConfigSource, out m_configSettings, out m_networkServersInfo); | ||||
|             Config = ConfigSource.Source; | ||||
|             ReadExtraConfigSettings(); | ||||
|         } | ||||
| 
 | ||||
|         protected virtual void ReadExtraConfigSettings() | ||||
|         { | ||||
|             IConfig networkConfig = m_config.Source.Configs["Network"]; | ||||
|             IConfig networkConfig = Config.Configs["Network"]; | ||||
|             if (networkConfig != null) | ||||
|             { | ||||
|                 proxyUrl = networkConfig.GetString("proxy_url", ""); | ||||
|  | @ -189,7 +184,7 @@ namespace OpenSim | |||
|         /// </summary> | ||||
|         protected override void StartupSpecific() | ||||
|         { | ||||
|             IConfig startupConfig = m_config.Source.Configs["Startup"]; | ||||
|             IConfig startupConfig = Config.Configs["Startup"]; | ||||
|             if (startupConfig != null) | ||||
|             { | ||||
|                 string pidFile = startupConfig.GetString("PIDFile", String.Empty); | ||||
|  | @ -205,7 +200,7 @@ namespace OpenSim | |||
|             } | ||||
| 
 | ||||
|             // Load the simulation data service | ||||
|             IConfig simDataConfig = m_config.Source.Configs["SimulationDataStore"]; | ||||
|             IConfig simDataConfig = Config.Configs["SimulationDataStore"]; | ||||
|             if (simDataConfig == null) | ||||
|                 throw new Exception("Configuration file is missing the [SimulationDataStore] section.  Have you copied OpenSim.ini.example to OpenSim.ini to reference config-include/ files?"); | ||||
| 
 | ||||
|  | @ -213,7 +208,7 @@ namespace OpenSim | |||
|             if (String.IsNullOrEmpty(module)) | ||||
|                 throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [SimulationDataStore] section."); | ||||
| 
 | ||||
|             m_simulationDataService = ServerUtils.LoadPlugin<ISimulationDataService>(module, new object[] { m_config.Source }); | ||||
|             m_simulationDataService = ServerUtils.LoadPlugin<ISimulationDataService>(module, new object[] { Config }); | ||||
|             if (m_simulationDataService == null) | ||||
|                 throw new Exception( | ||||
|                     string.Format( | ||||
|  | @ -221,7 +216,7 @@ namespace OpenSim | |||
|                         module)); | ||||
| 
 | ||||
|             // Load the estate data service | ||||
|             IConfig estateDataConfig = m_config.Source.Configs["EstateDataStore"]; | ||||
|             IConfig estateDataConfig = Config.Configs["EstateDataStore"]; | ||||
|             if (estateDataConfig == null) | ||||
|                 throw new Exception("Configuration file is missing the [EstateDataStore] section.  Have you copied OpenSim.ini.example to OpenSim.ini to reference config-include/ files?"); | ||||
| 
 | ||||
|  | @ -229,7 +224,7 @@ namespace OpenSim | |||
|             if (String.IsNullOrEmpty(module)) | ||||
|                 throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [EstateDataStore] section"); | ||||
| 
 | ||||
|             m_estateDataService = ServerUtils.LoadPlugin<IEstateDataService>(module, new object[] { m_config.Source }); | ||||
|             m_estateDataService = ServerUtils.LoadPlugin<IEstateDataService>(module, new object[] { Config }); | ||||
|             if (m_estateDataService == null) | ||||
|                 throw new Exception( | ||||
|                     string.Format( | ||||
|  | @ -257,7 +252,7 @@ namespace OpenSim | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         protected virtual void AddPluginCommands(CommandConsole console) | ||||
|         protected virtual void AddPluginCommands(ICommandConsole console) | ||||
|         { | ||||
|             List<string> topics = GetHelpTopics(); | ||||
| 
 | ||||
|  | @ -384,7 +379,7 @@ namespace OpenSim | |||
|             } | ||||
| 
 | ||||
|             IClientNetworkServer clientServer; | ||||
|             Scene scene = SetupScene(regionInfo, proxyOffset, m_config.Source, out clientServer); | ||||
|             Scene scene = SetupScene(regionInfo, proxyOffset, Config, out clientServer); | ||||
| 
 | ||||
|             m_log.Info("[MODULES]: Loading Region's modules (old style)"); | ||||
| 
 | ||||
|  | @ -530,10 +525,10 @@ namespace OpenSim | |||
|             string estateOwnerPassword = null; | ||||
|             string rawEstateOwnerUuid = null; | ||||
| 
 | ||||
|             if (m_config.Source.Configs[ESTATE_SECTION_NAME] != null) | ||||
|             if (Config.Configs[ESTATE_SECTION_NAME] != null) | ||||
|             { | ||||
|                 string defaultEstateOwnerName | ||||
|                     = m_config.Source.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerName", "").Trim(); | ||||
|                     = Config.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerName", "").Trim(); | ||||
|                 string[] ownerNames = defaultEstateOwnerName.Split(' '); | ||||
| 
 | ||||
|                 if (ownerNames.Length >= 2) | ||||
|  | @ -543,9 +538,9 @@ namespace OpenSim | |||
|                 } | ||||
| 
 | ||||
|                 // Info to be used only on Standalone Mode | ||||
|                 rawEstateOwnerUuid = m_config.Source.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerUUID", null); | ||||
|                 estateOwnerEMail = m_config.Source.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerEMail", null); | ||||
|                 estateOwnerPassword = m_config.Source.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerPassword", null); | ||||
|                 rawEstateOwnerUuid = Config.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerUUID", null); | ||||
|                 estateOwnerEMail = Config.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerEMail", null); | ||||
|                 estateOwnerPassword = Config.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateOwnerPassword", null); | ||||
|             } | ||||
| 
 | ||||
|             MainConsole.Instance.OutputFormat("Estate {0} has no owner set.", regionInfo.EstateSettings.EstateName); | ||||
|  | @ -797,7 +792,7 @@ namespace OpenSim | |||
|             return new Scene( | ||||
|                 regionInfo, circuitManager, sceneGridService, | ||||
|                 simDataService, estateDataService, false, | ||||
|                 m_config.Source, m_version); | ||||
|                 Config, m_version); | ||||
|         } | ||||
|          | ||||
|         protected void ShutdownClientServer(RegionInfo whichRegion) | ||||
|  | @ -838,7 +833,7 @@ namespace OpenSim | |||
|         protected override PhysicsScene GetPhysicsScene(string osSceneIdentifier) | ||||
|         { | ||||
|             return GetPhysicsScene( | ||||
|                 m_configSettings.PhysicsEngine, m_configSettings.MeshEngineName, m_config.Source, osSceneIdentifier); | ||||
|                 m_configSettings.PhysicsEngine, m_configSettings.MeshEngineName, Config, osSceneIdentifier); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -1075,9 +1070,9 @@ namespace OpenSim | |||
| 
 | ||||
|             string defaultEstateName = null; | ||||
| 
 | ||||
|             if (m_config.Source.Configs[ESTATE_SECTION_NAME] != null) | ||||
|             if (Config.Configs[ESTATE_SECTION_NAME] != null) | ||||
|             { | ||||
|                 defaultEstateName = m_config.Source.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateName", null); | ||||
|                 defaultEstateName = Config.Configs[ESTATE_SECTION_NAME].GetString("DefaultEstateName", null); | ||||
| 
 | ||||
|                 if (defaultEstateName != null) | ||||
|                 { | ||||
|  | @ -1160,28 +1155,14 @@ namespace OpenSim | |||
|                         MainConsole.Instance.Output("Joining the estate failed. Please try again."); | ||||
|                     } | ||||
|                 } | ||||
| 	    } | ||||
|     	    } | ||||
| 
 | ||||
| 	    return true;	// need to update the database | ||||
| 	} | ||||
|     	    return true;	// need to update the database | ||||
|     	} | ||||
|     } | ||||
|      | ||||
|     public class OpenSimConfigSource | ||||
|     { | ||||
|         public IConfigSource Source; | ||||
| 
 | ||||
|         public void Save(string path) | ||||
|         { | ||||
|             if (Source is IniConfigSource) | ||||
|             { | ||||
|                 IniConfigSource iniCon = (IniConfigSource) Source; | ||||
|                 iniCon.Save(path); | ||||
|             } | ||||
|             else if (Source is XmlConfigSource) | ||||
|             { | ||||
|                 XmlConfigSource xmlCon = (XmlConfigSource) Source; | ||||
|                 xmlCon.Save(path); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  | @ -52,7 +52,7 @@ namespace OpenSim.Server.Base | |||
| 
 | ||||
|         protected override void ReadConfig() | ||||
|         { | ||||
|             IConfig networkConfig = m_Config.Configs["Network"]; | ||||
|             IConfig networkConfig = Config.Configs["Network"]; | ||||
| 
 | ||||
|             if (networkConfig == null) | ||||
|             { | ||||
|  |  | |||
|  | @ -56,23 +56,10 @@ namespace OpenSim.Server.Base | |||
|         // | ||||
|         protected string[] m_Arguments; | ||||
| 
 | ||||
|         // Configuration | ||||
|         // | ||||
|         protected IConfigSource m_Config = null; | ||||
| 
 | ||||
|         public IConfigSource Config | ||||
|         { | ||||
|             get { return m_Config; } | ||||
|         } | ||||
| 
 | ||||
|         // Run flag | ||||
|         // | ||||
|         private bool m_Running = true; | ||||
| 
 | ||||
|         // PID file | ||||
|         // | ||||
|         private string m_pidFile = String.Empty; | ||||
| 
 | ||||
|         // Handle all the automagical stuff | ||||
|         // | ||||
|         public ServicesServerBase(string prompt, string[] args) : base() | ||||
|  | @ -122,11 +109,11 @@ namespace OpenSim.Server.Base | |||
|                     configUri.Scheme == Uri.UriSchemeHttp) | ||||
|                 { | ||||
|                     XmlReader r = XmlReader.Create(iniFile); | ||||
|                     m_Config = new XmlConfigSource(r); | ||||
|                     Config = new XmlConfigSource(r); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     m_Config = new IniConfigSource(iniFile); | ||||
|                     Config = new IniConfigSource(iniFile); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception e) | ||||
|  | @ -138,13 +125,13 @@ namespace OpenSim.Server.Base | |||
|             // Merge the configuration from the command line into the | ||||
|             // loaded file | ||||
|             // | ||||
|             m_Config.Merge(argvConfig); | ||||
|             Config.Merge(argvConfig); | ||||
| 
 | ||||
|             // Refresh the startupConfig post merge | ||||
|             // | ||||
|             if (m_Config.Configs["Startup"] != null) | ||||
|             if (Config.Configs["Startup"] != null) | ||||
|             { | ||||
|                 startupConfig = m_Config.Configs["Startup"]; | ||||
|                 startupConfig = Config.Configs["Startup"]; | ||||
|             } | ||||
| 
 | ||||
|             prompt = startupConfig.GetString("Prompt", prompt); | ||||
|  | @ -174,6 +161,8 @@ namespace OpenSim.Server.Base | |||
|                 MainConsole.Instance = new LocalConsole(prompt); | ||||
|             } | ||||
| 
 | ||||
|             m_console = MainConsole.Instance; | ||||
| 
 | ||||
|             // Configure the appenders for log4net | ||||
|             // | ||||
|             OpenSimAppender consoleAppender = null; | ||||
|  | @ -189,54 +178,15 @@ namespace OpenSim.Server.Base | |||
|                 XmlConfigurator.Configure(); | ||||
|             } | ||||
| 
 | ||||
|             ILoggerRepository repository = LogManager.GetRepository(); | ||||
|             IAppender[] appenders = repository.GetAppenders(); | ||||
| 
 | ||||
|             foreach (IAppender appender in appenders) | ||||
|             { | ||||
|                 if (appender.Name == "Console") | ||||
|                 { | ||||
|                     consoleAppender = (OpenSimAppender)appender; | ||||
|                 } | ||||
|                 if (appender.Name == "LogFileAppender") | ||||
|                 { | ||||
|                     fileAppender = (FileAppender)appender; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (consoleAppender == null) | ||||
|             { | ||||
|                 System.Console.WriteLine("No console appender found. Server can't start"); | ||||
|                 Thread.CurrentThread.Abort(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 consoleAppender.Console = (ConsoleBase)MainConsole.Instance; | ||||
| 
 | ||||
|                 if (null == consoleAppender.Threshold) | ||||
|                     consoleAppender.Threshold = Level.All; | ||||
|             } | ||||
| 
 | ||||
|             // Set log file | ||||
|             // | ||||
|             if (fileAppender != null) | ||||
|             { | ||||
|                 if (startupConfig != null) | ||||
|                 { | ||||
|                     string cfgFileName = startupConfig.GetString("logfile", null); | ||||
|                     if (cfgFileName != null) | ||||
|                     { | ||||
|                         fileAppender.File = cfgFileName; | ||||
|                         fileAppender.ActivateOptions(); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             RegisterCommonAppenders(startupConfig); | ||||
| 
 | ||||
|             if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty) | ||||
|             { | ||||
|                 CreatePIDFile(startupConfig.GetString("PIDFile")); | ||||
|             } | ||||
| 
 | ||||
|             RegisterCommonCommands(); | ||||
| 
 | ||||
|             // Register the quit command | ||||
|             // | ||||
|             MainConsole.Instance.Commands.AddCommand("General", false, "quit", | ||||
|  | @ -246,16 +196,6 @@ namespace OpenSim.Server.Base | |||
|             MainConsole.Instance.Commands.AddCommand("General", false, "shutdown", | ||||
|                     "shutdown", | ||||
|                     "Quit the application", HandleQuit); | ||||
|              | ||||
|             // Register a command to read other commands from a file | ||||
|             MainConsole.Instance.Commands.AddCommand("General", false, "command-script", | ||||
|                                           "command-script <script>", | ||||
|                                           "Run a command script from file", HandleScript); | ||||
| 
 | ||||
|             MainConsole.Instance.Commands.AddCommand("General", false, "show uptime", | ||||
|                         "show uptime", | ||||
|                         "Show server uptime", HandleShow); | ||||
| 
 | ||||
| 
 | ||||
|             // Allow derived classes to perform initialization that | ||||
|             // needs to be done after the console has opened | ||||
|  | @ -282,8 +222,8 @@ namespace OpenSim.Server.Base | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (m_pidFile != String.Empty) | ||||
|                 File.Delete(m_pidFile); | ||||
|             RemovePIDFile(); | ||||
| 
 | ||||
|             return 0; | ||||
|         } | ||||
| 
 | ||||
|  | @ -291,43 +231,9 @@ namespace OpenSim.Server.Base | |||
|         { | ||||
|             m_Running = false; | ||||
|             m_log.Info("[CONSOLE] Quitting"); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         protected virtual void HandleScript(string module, string[] parms) | ||||
|         { | ||||
|             if (parms.Length != 2) | ||||
|             { | ||||
|                 return; | ||||
|             } | ||||
|             RunCommandScript(parms[1]); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Run an optional startup list of commands | ||||
|         /// </summary> | ||||
|         /// <param name="fileName"></param> | ||||
|         private void RunCommandScript(string fileName) | ||||
|         { | ||||
|             if (File.Exists(fileName)) | ||||
|             { | ||||
|                 m_log.Info("[COMMANDFILE]: Running " + fileName); | ||||
| 
 | ||||
|                 using (StreamReader readFile = File.OpenText(fileName)) | ||||
|                 { | ||||
|                     string currentCommand; | ||||
|                     while ((currentCommand = readFile.ReadLine()) != null) | ||||
|                     { | ||||
|                         if (currentCommand != String.Empty) | ||||
|                         { | ||||
|                             m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'"); | ||||
|                             MainConsole.Instance.RunCommand(currentCommand); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         protected virtual void ReadConfig() | ||||
|         { | ||||
|         } | ||||
|  | @ -335,37 +241,5 @@ namespace OpenSim.Server.Base | |||
|         protected virtual void Initialise() | ||||
|         { | ||||
|         } | ||||
| 
 | ||||
|         protected void CreatePIDFile(string path) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); | ||||
|                 FileStream fs = File.Create(path); | ||||
|                 Byte[] buf = Encoding.ASCII.GetBytes(pidstring); | ||||
|                 fs.Write(buf, 0, buf.Length); | ||||
|                 fs.Close(); | ||||
|                 m_pidFile = path; | ||||
|             } | ||||
|             catch (Exception) | ||||
|             { | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public virtual void HandleShow(string module, string[] cmd) | ||||
|         { | ||||
|             List<string> args = new List<string>(cmd); | ||||
| 
 | ||||
|             args.RemoveAt(0); | ||||
| 
 | ||||
|             string[] showParams = args.ToArray(); | ||||
| 
 | ||||
|             switch (showParams[0]) | ||||
|             { | ||||
|                 case "uptime": | ||||
|                     MainConsole.Instance.Output(GetUptimeReport()); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -446,6 +446,7 @@ | |||
|       <Reference name="XMLRPC" path="../../../bin/"/> | ||||
|       <Reference name="log4net" path="../../../bin/"/> | ||||
|       <Reference name="HttpServer_OpenSim" path="../../../bin/"/> | ||||
|       <Reference name="Nini" path="../../../bin/"/> | ||||
| 
 | ||||
|       <Files> | ||||
|         <Match pattern="*.cs" recurse="false"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Melanie
						Melanie