145 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper8.Skyscraper.Plugins;
namespace DomainObjects
{
internal class Logger
{
private static Logger _instance;
public static Logger Instance
{
get
{
if(_instance == null)
_instance = new Logger();
return _instance;
}
}
public static string ProtocolIndent
{
get
{
return new string(' ', indentation);
}
}
private class EPGCollector
{
}
private PluginLogger _realLogger;
private Logger()
{
_realLogger = PluginLogManager.GetLogger(typeof(EPGCollector));
}
public void Write(string s)
{
_realLogger.Log(PluginLogLevel.All, s);
}
/// <summary>
/// Write a log separator line.
/// </summary>
/// <param name="identity">The text of the separator.</param>
public void WriteSeparator(string identity)
{
Write("");
Write("============================ " + identity + " ==============================");
Write("");
}
private static int indentation;
public static void IncrementProtocolIndent()
{
indentation++;
}
public static void DecrementProtocolIndent()
{
indentation--;
if (indentation <= -1)
{
indentation = 0;
}
}
private class EPGCollectorProtocolLogger
{
}
private static Logger _protocolLogger;
public static Logger ProtocolLogger
{
get
{
if (_protocolLogger == null)
{
_protocolLogger = new Logger();
_protocolLogger._realLogger = PluginLogManager.GetLogger(typeof(EPGCollectorProtocolLogger));
}
return _protocolLogger;
}
}
public void Dump(string identity, byte[] buffer, int length)
{
Dump(identity, buffer, 0, length);
}
public void Dump(string identity, byte[] buffer, int offset, int length)
{
Write("============================ " + identity + " starting ==============================");
StringBuilder loggerLineHex = new StringBuilder("0000 ");
StringBuilder loggerLineChar = new StringBuilder();
int lineIndex = 0;
for (int index = 0; index < length; index++)
{
if (lineIndex == 16)
{
Write(loggerLineHex.ToString() + " " + loggerLineChar.ToString());
loggerLineHex.Remove(0, loggerLineHex.Length);
loggerLineChar.Remove(0, loggerLineChar.Length);
loggerLineHex.Append(index.ToString("0000 "));
lineIndex = 0;
}
loggerLineHex.Append(getHex(buffer[index + offset] >> 4));
loggerLineHex.Append(getHex(buffer[index + offset] & 0x0f));
loggerLineHex.Append(' ');
if (buffer[index + offset] > ' ' - 1 && buffer[index + offset] < 0x7f)
loggerLineChar.Append((char)buffer[index + offset]);
else
loggerLineChar.Append('.');
lineIndex++;
}
if (loggerLineHex.Length != 0)
Write(loggerLineHex.ToString() + " " + loggerLineChar.ToString());
Write("============================ " + identity + " ending ==============================");
}
private char getHex(int dataChar)
{
if (dataChar < 10)
return ((char)('0' + dataChar));
return ((char)('a' + dataChar - 10));
}
}
}