diff --git a/Hcs.Client/Client/MessageCapturer/FileMessageCapturer.cs b/Hcs.Client/Client/MessageCapturer/FileMessageCapturer.cs new file mode 100644 index 0000000..87d3b08 --- /dev/null +++ b/Hcs.Client/Client/MessageCapturer/FileMessageCapturer.cs @@ -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); + } + } +} diff --git a/Hcs.Client/Client/MessageCapturer/IMessageCapturer.cs b/Hcs.Client/Client/MessageCapturer/IMessageCapturer.cs index 69b2702..0a3dc6a 100644 --- a/Hcs.Client/Client/MessageCapturer/IMessageCapturer.cs +++ b/Hcs.Client/Client/MessageCapturer/IMessageCapturer.cs @@ -6,6 +6,6 @@ /// public interface IMessageCapturer { - internal void CaptureMessage(bool sentOrReceived, string messageBody); + internal void CaptureMessage(bool sent, string messageBody); } } diff --git a/Hcs.Client/Client/MessageCapturer/MemoryMessageCapturer.cs b/Hcs.Client/Client/MessageCapturer/MemoryMessageCapturer.cs new file mode 100644 index 0000000..0b4de3f --- /dev/null +++ b/Hcs.Client/Client/MessageCapturer/MemoryMessageCapturer.cs @@ -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(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()); + } + } +}