Add IMessageCapturer implementations
This commit is contained in:
39
Hcs.Client/Client/MessageCapturer/FileMessageCapturer.cs
Normal file
39
Hcs.Client/Client/MessageCapturer/FileMessageCapturer.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using Hcs.Client.Logger;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Hcs.Client.MessageCapturer
|
||||||
|
{
|
||||||
|
public class FileMessageCapturer(string directory, ILogger logger) : IMessageCapturer
|
||||||
|
{
|
||||||
|
private readonly string directory = directory;
|
||||||
|
private readonly ILogger logger = logger;
|
||||||
|
|
||||||
|
public void CaptureMessage(bool sent, string messageBody)
|
||||||
|
{
|
||||||
|
var index = 0;
|
||||||
|
var maxIndex = 1000000;
|
||||||
|
string fileName;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
index += 1;
|
||||||
|
|
||||||
|
if (index > maxIndex)
|
||||||
|
{
|
||||||
|
throw new System.Exception("index value exceeds maxIndex value");
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName = index.ToString("D3") + "_" + (sent ? "message" : "response") + ".xml";
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(directory))
|
||||||
|
{
|
||||||
|
fileName = System.IO.Path.Combine(directory, fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (System.IO.File.Exists(fileName));
|
||||||
|
|
||||||
|
logger?.WriteLine($"Capturing message to file {fileName}...");
|
||||||
|
|
||||||
|
System.IO.File.WriteAllText(fileName, messageBody, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,6 +6,6 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IMessageCapturer
|
public interface IMessageCapturer
|
||||||
{
|
{
|
||||||
internal void CaptureMessage(bool sentOrReceived, string messageBody);
|
internal void CaptureMessage(bool sent, string messageBody);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
47
Hcs.Client/Client/MessageCapturer/MemoryMessageCapturer.cs
Normal file
47
Hcs.Client/Client/MessageCapturer/MemoryMessageCapturer.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Hcs.Client.MessageCapturer
|
||||||
|
{
|
||||||
|
public class MemoryMessageCapturer : IMessageCapturer
|
||||||
|
{
|
||||||
|
private readonly MemoryStream messageCaptureStream;
|
||||||
|
private readonly StreamWriter messageCaptureWriter;
|
||||||
|
|
||||||
|
public MemoryMessageCapturer()
|
||||||
|
{
|
||||||
|
messageCaptureStream = new MemoryStream();
|
||||||
|
messageCaptureWriter = new StreamWriter(messageCaptureStream, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CaptureMessage(bool sent, string messageBody)
|
||||||
|
{
|
||||||
|
if (messageCaptureStream.Position > 0)
|
||||||
|
{
|
||||||
|
messageCaptureWriter.WriteLine("");
|
||||||
|
}
|
||||||
|
|
||||||
|
messageCaptureWriter.Write("<!--");
|
||||||
|
messageCaptureWriter.Write(sent ? "SENT " : "RECEIVED ");
|
||||||
|
messageCaptureWriter.Write(DateTime.Now.ToString());
|
||||||
|
messageCaptureWriter.WriteLine("-->");
|
||||||
|
messageCaptureWriter.Write(messageBody);
|
||||||
|
messageCaptureWriter.Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] GetData()
|
||||||
|
{
|
||||||
|
var buf = messageCaptureStream.GetBuffer();
|
||||||
|
var size = (int)messageCaptureStream.Length;
|
||||||
|
var data = new byte[size];
|
||||||
|
Buffer.BlockCopy(buf, 0, data, 0, size);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Encoding.UTF8.GetString(GetData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user