using System;
using System.Diagnostics;
using System.Text;
using System.Threading;
namespace Holo
{
///
/// Provides interface output related functions, such as logging activities.
///
public static class Out
{
///
/// Enum with flags for log importancies. If 'minimumImportance' flag is higher than the action to be logged, then the action won't be logged.
///
public enum logFlags { ImportantAction = 3, StandardAction = 2, BelowStandardAction = 1, MehAction = 0 }
///
/// Flag for minimum importance in logs. Adjust this to don't print less important logs.
///
public static logFlags minimumImportance;
private static bool bwait = false;
private static int CurrentWaitingMessages = 0;
private static StringBuilder ErrorQueue = new StringBuilder();
private static bool IsWriting = false;
///
/// Prints a green line of log, together with timestamp and method name.
///
/// The log line to be printed.
public static void wait()
{
while (bwait) { Thread.Sleep(10); }
}
public static void WriteLine(string logText)
{
wait();
bwait = true;
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;
bwait = false;
}
///
/// Prints a green line of log, together with timestamp and method name.
///
/// The log line to be printed.
/// The importance flag of this log line.
public static void WriteLine(string logText, logFlags logFlag)
{
if ((int)logFlag < (int)minimumImportance)
return;
wait();
bwait = true;
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;
bwait = false;
}
///
/// Prints a customizeable line of log, together with timestamp and method name.
///
/// The log line to be printed.
/// The importance flag of this log line.
/// The color to use on the left.
/// The color to use on the right.
public static void WriteLine(string logText, logFlags logFlag, ConsoleColor colorOne, ConsoleColor colorTwo)
{
if ((int)logFlag < (int)minimumImportance)
return;
wait();
bwait = true;
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = colorOne;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = colorTwo;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;
bwait = false;
}
public static void WriteTrace(string logText)
{
return;
/*DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = ConsoleColor.DarkMagenta;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = ConsoleColor.DarkMagenta;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;*/
}
///
/// Prints a red, error line of log, together with timestamp and method name.
///
/// The log line to be printed.
public static void WriteError(string logText)
{
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;
}
///
/// Prints a red,error line of log, together with timestamp and method name.
///
/// The log line to be printed.
/// The importance flag of this error.
public static void WriteError(string logText, logFlags logFlag)
{
if ((int)logFlag < (int)minimumImportance)
return;
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] » ");
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine(logText);
Console.ForegroundColor = ConsoleColor.Gray;
}
///
/// Writes a plain text line.
///
/// The log line to be printed.
public static void WritePlain(string logText)
{
wait();
bwait = true;
Console.WriteLine(logText);
bwait = false;
}
///
/// Writes a blank line.
///
public static void WriteBlank()
{
wait();
bwait = true;
Console.WriteLine();
bwait = false;
}
///
/// Writes a special line of log, with customizeable colors and header coloring of logText.
///
/// The log line to be printed.
/// The importance flag of this log line.
/// The color to use on the left.
/// The color to use on the right.
/// The string to use infront of logText.
/// The length of the header to color.
/// The color for the header in the logText.
public static void WriteSpecialLine(string logText, logFlags logFlag, ConsoleColor colorOne, ConsoleColor colorTwo, string headerHead, int headerLength, ConsoleColor headerColor)
{
//if ((int)logFlag < (int)minimumImportance)
//return;
wait();
bwait = true;
DateTime _DTN = DateTime.Now;
StackFrame _SF = new StackTrace().GetFrame(1);
Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] [");
Console.ForegroundColor = colorOne;
Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("] " + headerHead + " ");
Console.ForegroundColor = headerColor;
try { Console.Write(logText.Substring(0, headerLength)); }
catch { Console.Write(logText); }
Console.ForegroundColor = colorTwo;
Console.WriteLine(logText.Substring(headerLength));
Console.ForegroundColor = ConsoleColor.Gray;
bwait = false;
}
public static void WriteDCError(string logText)
{
DateTime _DTN = DateTime.Now;
string Current = "Event occurred : " + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "\r\n";
ErrorQueue.Append(Current + logText + "\r\n\r\n");
CurrentWaitingMessages++;
if (CurrentWaitingMessages >= 10)
WriteAllErrors();
WriteError("Errormessage has been added to queue");
}
internal static void WriteAllErrors()
{
bool Fail = false;
try
{
while (IsWriting)
Thread.Sleep(100);
IsWriting = true;
System.IO.FileStream Writer = new System.IO.FileStream(IO.workingDirectory + @"\Logs\Exceptions.log", System.IO.FileMode.Append, System.IO.FileAccess.Write);
byte[] Msg = System.Text.ASCIIEncoding.ASCII.GetBytes(ErrorQueue.ToString());
Writer.Write(Msg, 0, Msg.Length);
IsWriting = false;
}
catch
{
Out.WriteError("Could not save messages in queue. Queue destroyed."); Fail = true;
}
finally
{
if (!Fail)
Out.WriteLine("All errors where successfully saved.");
int ErrorsInQueue = ErrorQueue.Length;
ErrorQueue.Remove(0, ErrorsInQueue);
ErrorsInQueue = 0;
}
}
}
}