/[RomCheater]/trunk/RomCheater.Logging/LogWriter.cs
ViewVC logotype

Diff of /trunk/RomCheater.Logging/LogWriter.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 300 by william, Tue Jun 5 11:35:37 2012 UTC revision 301 by william, Tue Jun 5 13:27:07 2012 UTC
# Line 9  using System.Text; Line 9  using System.Text;
9  using System.Windows.Forms;  using System.Windows.Forms;
10  using System.IO;  using System.IO;
11  using System.Reflection;  using System.Reflection;
12    using System.Security;
13    
14  namespace RomCheater.Logging  namespace RomCheater.Logging
15  {  {
# Line 20  namespace RomCheater.Logging Line 21  namespace RomCheater.Logging
21          private delegate void OnSetLogText(string value);          private delegate void OnSetLogText(string value);
22          private delegate void GenericVoidDelegate();          private delegate void GenericVoidDelegate();
23    
24          private OnGetLogText HandleGetLogText = null;          //private OnGetLogText HandleGetLogText = null;
25          private OnSetLogText HandleSetLogText = null;          private OnSetLogText HandleSetLogText = null;
26          private GenericVoidDelegate delegate_EndLogUpdate = null;          private GenericVoidDelegate delegate_EndLogUpdate = null;
27    
# Line 29  namespace RomCheater.Logging Line 30  namespace RomCheater.Logging
30          {          {
31              InitializeComponent();              InitializeComponent();
32              this.Log = new LogStream(this);              this.Log = new LogStream(this);
33              HandleGetLogText += new OnGetLogText(GetLogText);              //HandleGetLogText += new OnGetLogText(GetLogText);
34              HandleSetLogText += new OnSetLogText(SetLogText);              HandleSetLogText += new OnSetLogText(SetLogText);
35    
36              delegate_EndLogUpdate += new GenericVoidDelegate(EndLogUpdate);              //delegate_EndLogUpdate += new GenericVoidDelegate(EndLogUpdate);
37    
38              this.RedirectConsoleOutput = redirectConsole;              this.RedirectConsoleOutput = redirectConsole;
39              toolTip1.SetToolTip(btnClearLog, "Clears the Log");              toolTip1.SetToolTip(btnClearLog, "Clears the Log");
40              toolTip1.SetToolTip(btnCopyLogToClipboard, "Copies the Log to the Clipboard");              toolTip1.SetToolTip(btnCopyLogToClipboard, "Copies the Log to the Clipboard");
41    
42              ms = new MemoryStream();              //ms = new MemoryStream();
43              sw = new StreamWriter(ms);              //sw = new StreamWriter(ms);
44              sw.AutoFlush = true;              //sw.AutoFlush = true;
45              sr = new StreamReader(ms);              //sr = new StreamReader(ms);
46          }          }
47          private LogStream _Log;          private LogStream _Log;
48          public LogStream Log { get { return _Log; } private set { _Log = value; } }          public LogStream Log { get { return _Log; } private set { _Log = value; } }
49    
50    
51          private MemoryStream ms;          //private MemoryStream ms;
52          private StreamWriter sw;          //private StreamWriter sw;
53          private StreamReader sr;          //private StreamReader sr;
54          private bool _AutoScroll;          private bool _AutoScroll;
55          new public bool AutoScroll { get { return _AutoScroll; } set { _AutoScroll = value; autoscroll_timer.Enabled = value; } }          new public bool AutoScroll { get { return _AutoScroll; } set { _AutoScroll = value; autoscroll_timer.Enabled = value; } }
56    
# Line 77  namespace RomCheater.Logging Line 78  namespace RomCheater.Logging
78          }          }
79    
80          private void btnClearLog_Click(object sender, EventArgs e) { this.Clear(true); }          private void btnClearLog_Click(object sender, EventArgs e) { this.Clear(true); }
81          private void btnCopyLogToClipboard_Click(object sender, EventArgs e) { Clipboard.SetText(GetLogText()); }          private void btnCopyLogToClipboard_Click(object sender, EventArgs e) { Clipboard.SetText(txtLog.Text); }
82    
83    
84          private string PreserveLineEndings(string text) { return text.Replace("\n", System.Environment.NewLine); }          private string PreserveLineEndings(string text) { return text.Replace("\n", System.Environment.NewLine); }
85    
86    
87          private bool BeginUpdate;          //private bool BeginUpdate;
88          public void BeginLogUpdate()          //public void BeginLogUpdate()
89          {          //{
90              BeginUpdate = true;          //    BeginUpdate = true;
91          }          //}
92          public void EndLogUpdate()          //public void EndLogUpdate()
93          {          //{
94              if (txtLog.InvokeRequired)          //    if (txtLog.InvokeRequired)
95              {          //    {
96                  this.Invoke(delegate_EndLogUpdate);          //        this.Invoke(delegate_EndLogUpdate);
97              }          //    }
98              else          //    else
99              {          //    {
100                  StringReader _sr = new StringReader(GetLogText());          //        StringReader _sr = new StringReader(GetLogText());
101                  List<string> lines = new List<string>();          //        List<string> lines = new List<string>();
102                  string line = "";          //        string line = "";
103                  while ((line = _sr.ReadLine()) != null)          //        while ((line = _sr.ReadLine()) != null)
104                  {          //        {
105                      lines.Add(line);          //            lines.Add(line);
106                  }          //        }
107                  txtLog.Lines = lines.ToArray();          //        txtLog.Lines = lines.ToArray();
108                  BeginUpdate = false;          //        BeginUpdate = false;
109              }          //    }
110          }          //}
111          private string StreamToString()          //private string StreamToString()
112          {          //{
113              try          //    try
114              {          //    {
115                  string value = "";          //        string value = "";
116                  sr = new StreamReader(ms);          //        sr = new StreamReader(ms);
117                  sr.BaseStream.Seek(0, SeekOrigin.Begin);          //        sr.BaseStream.Seek(0, SeekOrigin.Begin);
118                  value = sr.ReadToEnd();          //        value = sr.ReadToEnd();
119                  return value;          //        return value;
120              }          //    }
121              catch (Exception ex)          //    catch (Exception ex)
122              {          //    {
123                  return "";          //        return "";
124              }          //    }
125          }          //}
126          public string GetLogText()          //public string GetLogText()
127          {          //{
128              //if (txtLog.InvokeRequired)          //    if (txtLog.InvokeRequired)
129              //{          //    {
130              //    return (string)this.Invoke(HandleGetLogText, new object[] { });          //        return (string)this.Invoke(HandleGetLogText, new object[] { });
131              //}          //    }
132              //else          //    else
133              //{          //    {
134              return PreserveLineEndings(StreamToString());          //        string text = PreserveLineEndings(StreamToString());
135              //}          //        StringReader _sr = new StringReader(GetLogText());
136            //        List<string> lines = new List<string>();
137          }          //        string line = "";
138            //        while ((line = _sr.ReadLine()) != null)
139            //        {
140            //            lines.Add(line);
141            //        }
142            //        txtLog.Lines = lines.ToArray();
143            //        return text;
144            //    }
145            //}
146          public void SetLogText(string value)          public void SetLogText(string value)
147          {          {
148              FileStream fs = new FileStream(LOG_PATH, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);              FileStream fs = new FileStream(LOG_PATH, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
# Line 143  namespace RomCheater.Logging Line 152  namespace RomCheater.Logging
152              else { writer.Write(value); }              else { writer.Write(value); }
153              writer.Close();              writer.Close();
154              //string text = value.Replace(System.Environment.NewLine,"");              //string text = value.Replace(System.Environment.NewLine,"");
155              string text = value.Replace(System.Environment.NewLine, Log.NewLine);              //string text = value.Replace(System.Environment.NewLine, Log.NewLine);
156              //if (text.StartsWith(Log.NewLine))              ////if (text.StartsWith(Log.NewLine))
157              //{              ////{
158              //    text = text.Remove(0, Log.NewLine.Length);              ////    text = text.Remove(0, Log.NewLine.Length);
159              //}              ////}
160              sw.Write(text);              //sw.Write(text);
161              Application.DoEvents();              //Application.DoEvents();
162                txtLog.AppendText(value);
163          }          }
164    
165          new public string Text          new public string Text
# Line 187  namespace RomCheater.Logging Line 197  namespace RomCheater.Logging
197              {              {
198    
199                  txtLog.Clear();                  txtLog.Clear();
200                  ms = new MemoryStream();                  //ms = new MemoryStream();
201                  sw = new StreamWriter(ms);                  //sw = new StreamWriter(ms);
202                  sw.AutoFlush = true;                  //sw.AutoFlush = true;
203                  sr = new StreamReader(ms);                  //sr = new StreamReader(ms);
204              }              }
205          }          }
206          #region sub-classes          #region sub-classes
# Line 200  namespace RomCheater.Logging Line 210  namespace RomCheater.Logging
210              public LogStream() : this(null) { }              public LogStream() : this(null) { }
211              public LogStream(LogWriter text) : base() { _text_writer = text; this.NewLine = "\n"; }              public LogStream(LogWriter text) : base() { _text_writer = text; this.NewLine = "\n"; }
212              private LogWriter _text_writer;              private LogWriter _text_writer;
213              private void _write(string message)              //private void _write(string message)
214              {              //{
215                  if (_text_writer == null) return;              //    if (_text_writer == null) return;
216    
217                  if (message.EndsWith("\n"))              //    if (message.EndsWith("\n"))
218                  {              //    {
219                      //_text_writer.SetLogText(string.Format("{0}", strMessage.ToString()));              //        //_text_writer.SetLogText(string.Format("{0}", strMessage.ToString()));
220                      while (_text_writer.logupdater.IsBusy)              //        while (_text_writer.logupdater.IsBusy)
221                      {              //        {
222                          Application.DoEvents();              //            Application.DoEvents();
223                      }              //        }
224                      _text_writer.logupdater.RunWorkerAsync((string.Format("{0}", strMessage.ToString())));              //        _text_writer.logupdater.RunWorkerAsync((string.Format("{0}", strMessage.ToString())));
225                      strMessage = new StringBuilder();              //        strMessage = new StringBuilder();
226                  }              //    }
227                  strMessage.Append(message);              //    strMessage.Append(message);
228              }              //}
229              #region Overriden Methods              #region Overriden Methods
230              public override Encoding Encoding { get { return Encoding.UTF8; } }              public override Encoding Encoding { get { return Encoding.UTF8; } }
231              public override void Write(char value) { base.Write(value); _write(value.ToString()); if (!_text_writer.BeginUpdate) _text_writer.EndLogUpdate(); }  
232                public override void Write(bool value) { _text_writer.SetLogText(value.ToString()); }
233                public override void Write(char value) { _text_writer.SetLogText(value.ToString()); }
234                public override void Write(char[] buffer) { _text_writer.SetLogText(new string(buffer)); }
235                public override void Write(decimal value) { _text_writer.SetLogText(value.ToString()); }
236                public override void Write(double value) { _text_writer.SetLogText(value.ToString()); }
237                public override void Write(float value) { _text_writer.SetLogText(value.ToString()); }
238                public override void Write(int value) { _text_writer.SetLogText(value.ToString()); }
239                public override void Write(long value) { _text_writer.SetLogText(value.ToString()); }
240                public override void Write(object value) { _text_writer.SetLogText(value.ToString()); }
241                public override void Write(string value) { _text_writer.SetLogText(value.ToString()); }
242                public override void Write(uint value) { _text_writer.SetLogText(value.ToString()); }
243                public override void Write(ulong value) { _text_writer.SetLogText(value.ToString()); }
244                public override void Write(string format, object arg0) { _text_writer.SetLogText(string.Format(format, arg0)); }
245                public override void Write(string format, params object[] arg) { _text_writer.SetLogText(string.Format(format, arg)); }
246                public override void Write(char[] buffer, int index, int count)
247                {
248                    byte[] t = new byte[count];
249                    MemoryStream ms = new MemoryStream();
250                    StreamWriter sw = new StreamWriter(ms);
251                    sw.AutoFlush = true;
252                    sw.Write(buffer, index, count);
253                    sw.Close();
254                    _text_writer.SetLogText(Encoding.GetString(ms.ToArray()));
255                }
256                public override void Write(string format, object arg0, object arg1) { _text_writer.SetLogText(string.Format(format, arg0, arg1)); }
257                public override void Write(string format, object arg0, object arg1, object arg2) { _text_writer.SetLogText(string.Format(format, arg0, arg1, arg2)); }
258                public override void WriteLine() { _text_writer.SetLogText(System.Environment.NewLine); }
259                public override void WriteLine(bool value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
260                public override void WriteLine(char value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
261                public override void WriteLine(char[] buffer) { _text_writer.SetLogText(string.Format("{0}{1}", new string(buffer), System.Environment.NewLine)); }
262                public override void WriteLine(decimal value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
263                public override void WriteLine(double value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
264                public override void WriteLine(float value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
265                public override void WriteLine(int value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
266                public override void WriteLine(long value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
267                public override void WriteLine(object value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
268                [SecuritySafeCritical]
269                public override void WriteLine(string value) { _text_writer.SetLogText(string.Format("{0}{1}", value, System.Environment.NewLine)); }
270                public override void WriteLine(uint value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
271                public override void WriteLine(ulong value) { _text_writer.SetLogText(string.Format("{0}{1}", value.ToString(), System.Environment.NewLine)); }
272                public override void WriteLine(string format, object arg0) { _text_writer.SetLogText(string.Format("{0}{1}", string.Format(format, arg0), System.Environment.NewLine)); }
273                public override void WriteLine(string format, params object[] arg) { _text_writer.SetLogText(string.Format("{0}{1}", string.Format(format, arg), System.Environment.NewLine)); }
274                public override void WriteLine(char[] buffer, int index, int count)
275                {
276                    byte[] t = new byte[count];
277                    MemoryStream ms = new MemoryStream();
278                    StreamWriter sw = new StreamWriter(ms);
279                    sw.AutoFlush = true;
280                    sw.Write(buffer, index, count);
281                    sw.Close();
282                    _text_writer.SetLogText(string.Format("{0}{1}",Encoding.GetString(ms.ToArray()),System.Environment.NewLine));
283                }
284                public override void WriteLine(string format, object arg0, object arg1) { _text_writer.SetLogText(string.Format("{0}{1}", string.Format(format, arg0, arg1), System.Environment.NewLine)); }
285                public override void WriteLine(string format, object arg0, object arg1, object arg2) { _text_writer.SetLogText(string.Format("{0}{1}", string.Format(format, arg0, arg1, arg2), System.Environment.NewLine)); }
286              #endregion              #endregion
287          }          }
288          #endregion          #endregion

Legend:
Removed from v.300  
changed lines
  Added in v.301

  ViewVC Help
Powered by ViewVC 1.1.22