/// <summary>
 /// Logs the provided Exception as Error Output
 ///
 /// TO BE USED TO LOG Exceptions ONLY
 /// </summary>
 /// <param name="e">Exception to output</param>
 /// <returns>True if log successful</returns>
 public static bool Error(Exception e)
 {
     lock (Threads.GenericThreadSafeLock)
     {
         Directories.DirectoryPrepare("./Logs/");
         Directories.DirectoryPrepare("./Logs/ErrorLogs/");
         string LogFile = "./Logs/ErrorLogs/" + OYS_DateTime.ToOYSLongDateTime(TimeStarted).ReplaceAll("/", "_").ReplaceAll(" ", "_").ReplaceAll(":", "_") + ".html";
         Files.PrepareHTMLLog(LogFile);
         System.Environment.SetEnvironmentVariable("_NT_SYMBOL_PATH", "./Debug/");
         var    st     = new StackTrace(e, true);
         var    frame  = st.GetFrame(0);
         string output = "";
         output += "&cMESSAGE:      &e" + e.Message + "\n";
         output += "&cSTART TRACE:  \n";
         foreach (StackFrame Frame in st.GetFrames())
         {
             output += "&c    METHOD:       &e" + frame.GetMethod() + "\n";
             output += "&c        LINENUMBER:   &e" + frame.GetFileLineNumber() + "\n";
             output += "&c        COLUMNNUMBER: &e" + frame.GetFileColumnNumber() + "\n";
         }
         output += "&cEND TRACE.\n";
         output += "\n";
         List <string> MessagesOut = new List <string>();
         foreach (string Line in output.Split('\n'))
         {
             MessagesOut.Add(String.Format("{0}: {1}", OYS_DateTime.ToOYSLongDateTime(DateTime.Now), Line));
         }
         Files.FileHTMLAppend(LogFile, MessagesOut.ToArray());
     }
     return(true);
 }
        /// <summary>
        /// Logs the provided string as Console Output
        ///
        /// TO BE USED TO LOG CONSOLE OUTPUT ONLY
        /// </summary>
        /// <param name="Input">String to output</param>
        /// <returns>True if log successful</returns>
        public static bool ConsoleOutput(string Input, params object[] args)
        {
            if (args == null)
            {
                args = new object[0];
            }
            if (args.Length > 0)
            {
                try
                {
                    Input = String.Format(Input, args);
                }
                catch (Exception e)
                {
                    Input = e.StackTrace + "\n" + Input;
                }
            }

            lock (Threads.GenericThreadSafeLock)
            {
                Directories.DirectoryPrepare("./Logs/");
                Directories.DirectoryPrepare("./Logs/ConsoleLogs/");
                string LogFile = "./Logs/ConsoleLogs/" + OYS_DateTime.ToOYSLongDateTime(TimeStarted).ReplaceAll("(", "_").ReplaceAll(" ", "_").ReplaceAll(")", "_") + ".html";
                Files.PrepareHTMLLog(LogFile);
                string[] MessageOut = { String.Format("{0}: {1}", OYS_DateTime.ToOYSLongDateTime(DateTime.Now), Input) };
                Files.FileHTMLAppend(LogFile, MessageOut);
            }
            return(true);
        }
 /// <summary>
 /// Logs the provided string as a debug message
 ///
 /// TO BE USED TO LOG DEBUGGING OUTPUT ONLY
 /// (WHEN DEBUGGING WITH OPENYS PARTICIPANTS AND NOT ON LOCAL SYSTEM.)
 ///
 /// ****
 ///
 /// TO DEBUG ON LOCAL SYSTEM, USE INSTEAD DEBUG.WRITELINE() AND
 /// THE MESSAGE WILL BE OUTPUT TO VISUAL STUDIO OUTPUT FEED!
 ///
 /// ****
 /// </summary>
 /// <param name="Out">String to output</param>
 /// <returns>True if log successful</returns>
 public static bool Debug(string Out, params object[] args)
 {
     if (args == null)
     {
         args = new object[0];
     }
     if (args.Length > 0)
     {
         try
         {
             Out = String.Format(Out, args);
         }
         catch (Exception e)
         {
             Out = e.StackTrace + "\n" + Out;
         }
     }
     lock (Threads.GenericThreadSafeLock)
     {
         Directories.DirectoryPrepare("./Logs/");
         Directories.DirectoryPrepare("./Logs/DebuggingLogs/");
         string LogFile = "./Logs/DebuggingLogs/" + OYS_DateTime.ToOYSLongDateTime(TimeStarted).ReplaceAll("/", "_").ReplaceAll(" ", "_").ReplaceAll(":", "_") + ".html";
         Files.PrepareHTMLLog(LogFile);
         List <string> MessagesOut = new List <string>();
         MessagesOut.Add(String.Format("{0}: {1}", OYS_DateTime.ToOYSLongDateTime(DateTime.Now), Out));
         Files.FileHTMLAppend(LogFile, MessagesOut.ToArray());
     }
     return(true);
 }
 /// <summary>
 /// Logs the provided string as a Data Dump
 ///
 /// TO BE USED TO LOG DATA DUMPS FROM THE /DUMP COMMAND ONLY
 /// </summary>
 /// <param name="Out">String to output</param>
 /// <returns>True if log successful</returns>
 public static bool DataDump(string Input)
 {
     lock (Threads.GenericThreadSafeLock)
     {
         Directories.DirectoryPrepare("./Logs/");
         Directories.DirectoryPrepare("./Logs/DumpLogs/");
         string LogFile = "./Logs/DumpLogs/" + OYS_DateTime.ToOYSLongDateTime(DumpTime).ReplaceAll("/", "_").ReplaceAll(" ", "_").ReplaceAll(":", "_") + ".html";
         Files.PrepareHTMLLog(LogFile);
         String[] MessageOut = { String.Format("{0}: {1}", OYS_DateTime.ToOYSLongDateTime(DumpTime), Input) };
         Files.FileHTMLAppend(LogFile, MessageOut);
     }
     return(true);
 }
 /// <summary>
 /// Logs the provided Packets List as a Packet Log.
 ///
 /// TO BE USED TO LOG PACKETS ONLY
 /// </summary>
 /// <param name="Out">String to output</param>
 /// <returns>True if log successful</returns>
 public static bool Packets(List <string> Out)
 {
     lock (Threads.GenericThreadSafeLock)
     {
         Directories.DirectoryPrepare("./Logs/");
         Directories.DirectoryPrepare("./Logs/PacketLogs/");
         string LogFile = "./Logs/PacketLogs/" + OYS_DateTime.ToOYSLongDateTime(DateTime.Now).ReplaceAll("/", "_").ReplaceAll(" ", "_").ReplaceAll(":", "_") + ".html";
         Files.PrepareHTMLLog(LogFile);
         List <string> MessagesOut = new List <string>();
         foreach (string ThisString in Out)
         {
             MessagesOut.Add(String.Format("{0}: {1}", OYS_DateTime.ToOYSLongDateTime(DateTime.Now), ThisString));
         }
         Files.FileHTMLAppend(LogFile, MessagesOut.ToArray());
     }
     return(true);
 }