using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Windows.Forms; namespace RomCheater.Logging { public interface ILogger { void Write(string format, params object[] args); void WriteLine(string format, params object[] args); } #region MesageLogger [Flags] public enum loggerflags { NONE = 0x0000, // 000 INFO = 0x0001, // 001 DEBUG = 0x0002, // 010 ERROR= 0x0004, // 100 DEFAULT = INFO | ERROR | DEBUG, ALL = DEFAULT, } public static class logger { private static loggerflags logging_flags; static logger() { SetLoggingFlags(loggerflags.DEFAULT); } public static void SetLoggingFlags(loggerflags flags) { logging_flags = flags; } #region sub-classes private static string CreateTimeStamp() { string timestamp = ""; DateTime now = DateTime.Now; timestamp = now.ToString("yyyy/MM/dd HH:mm:ss tt: "); return timestamp; } public static class Info { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp()+ "(INFO) " + format; } public static void Write(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.INFO)) { xlogger.Write(CreateNewFormat(format), args); } } public static void WriteLine(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.INFO)) { xlogger.WriteLine(CreateNewFormat(format), args); } } } public static class Debug { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp() + "(DEBUG) " + format; } public static void Write(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.DEBUG)) { xlogger.Write(CreateNewFormat(format), args); } } public static void WriteLine(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.DEBUG)) { xlogger.WriteLine(CreateNewFormat(format), args); } } } public static class Error { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp() + "(ERROR) " + format; } public static void Write(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.ERROR)) { xlogger.Write(CreateNewFormat(format), args); } } public static void WriteLine(string format, params object[] args) { if (logging_flags.HasFlag(loggerflags.ERROR)) { xlogger.WriteLine(CreateNewFormat(format), args); } } } #region Force logging public static class ForceLog { public static class Info { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp() + "(FORCED INFO) " + format; } public static void Write(string format, params object[] args) { xlogger.Write(CreateNewFormat(format), args); } public static void WriteLine(string format, params object[] args) { xlogger.WriteLine(CreateNewFormat(format), args); } } public static class Debug { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp() + "(FORCED DEBUG) " + format; } public static void Write(string format, params object[] args) { xlogger.Write(CreateNewFormat(format), args); } public static void WriteLine(string format, params object[] args) { xlogger.WriteLine(CreateNewFormat(format), args); } } public static class Error { private static string CreateNewFormat(string format) { return " " + CreateTimeStamp() + "(FORCED ERROR) " + format; } public static void Write(string format, params object[] args) { xlogger.Write(CreateNewFormat(format), args); } public static void WriteLine(string format, params object[] args) { xlogger.WriteLine(CreateNewFormat(format), args); } } } #endregion #endregion } #endregion #region internal static class Logger internal static class xlogger { private static logwriter lh; static xlogger() { lh = new logwriter(); } #region ILogger Members public static void Write(string format, params object[] args) { init(); lh.Write(format, args); } public static void WriteLine(string format, params object[] args) { init(); lh.WriteLine(format, args); } #endregion #region Reflection Support private static void init() { Assembly asm = Assembly.GetEntryAssembly(); Type[] types = asm.GetTypes(); foreach (Type t in types) { if (t.BaseType == typeof(Form)) { LogWriter lw = null; PropertyInfo[] properties = t.GetProperties(BindingFlags.NonPublic | BindingFlags.Static); foreach (PropertyInfo prop in properties) { if (prop.PropertyType == typeof(LogWriter)) { try { lw = (LogWriter)prop.GetValue(null, null); lh = new logwriter(lw); break; } catch (Exception) { throw; } } } } } } #endregion } #endregion #region internal class LogHelper : ILogger internal class logwriter : ILogger { private LogWriter writer; public logwriter() : this(null) { } public logwriter(LogWriter writer) { this.writer = writer; } #region ILogger Members public void Write(string format, params object[] args) { WriteToLog(format,false, args); } public void WriteLine(string format, params object[] args) { WriteToLog(format,true, args); } private void WriteToLog(string format, bool newline, params object[] args) { if (writer != null) { if (newline) { writer.Log.WriteLine(format, args); } else { writer.Log.Write(format, args); } } } #endregion } #endregion }