using Hcs.Broker.Logger; using System.Text; namespace Hcs.Broker.MessageCapturer { /// /// Реализация механизма захвата содержимого сообщений SOAP, записывающая /// каждое сообщение в отдельный файл на диске /// 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 Exception("index value exceeds maxIndex value"); } fileName = index.ToString("D3") + "_" + (sent ? "message" : "response") + ".xml"; if (!string.IsNullOrEmpty(directory)) { fileName = Path.Combine(directory, fileName); } } while (File.Exists(fileName)); logger?.WriteLine($"Capturing message to file {fileName}..."); File.WriteAllText(fileName, messageBody, Encoding.UTF8); } } }