public override Task SaveAsync(List <AnalogyLogMessage> messages, string fileName)

        => Task.Factory.StartNew(async() =>
        {
            if (fileName.EndsWith(".ajson", StringComparison.InvariantCultureIgnoreCase))
            {
                AnalogyJsonLogFile logFile = new AnalogyJsonLogFile();
                await logFile.Save(messages, fileName);
            }
            else if (fileName.EndsWith(".abin", StringComparison.InvariantCultureIgnoreCase))
            {
                AnalogyMessagePackFormat logFile = new AnalogyMessagePackFormat();
                await logFile.Save(messages, fileName);
            }
        });
        public async Task <IEnumerable <AnalogyLogMessage> > Process(string fileName, CancellationToken token, ILogMessageCreatedHandler messagesHandler)
        {
            if (fileName.EndsWith(".axml", StringComparison.InvariantCultureIgnoreCase))
            {
                AnalogyXmlLogFile logFile = new AnalogyXmlLogFile();
                var messages = await logFile.ReadFromFile(fileName, token, messagesHandler);

                return(messages);
            }
            if (fileName.EndsWith(".ajson", StringComparison.InvariantCultureIgnoreCase))
            {
                AnalogyJsonLogFile logFile = new AnalogyJsonLogFile();
                var messages = await logFile.ReadFromFile(fileName, token, messagesHandler);

                return(messages);
            }
            if (fileName.EndsWith(".abin", StringComparison.InvariantCultureIgnoreCase))
            {
                AnalogyMessagePackFormat logFile = new AnalogyMessagePackFormat();
                var messages = await logFile.ReadFromFile(fileName, token, messagesHandler);

                return(messages);
            }
            else
            {
                AnalogyLogMessage m = new AnalogyLogMessage
                {
                    Text        = $"Unsupported file: {fileName}. Skipping file",
                    Level       = AnalogyLogLevel.Critical,
                    Source      = "Analogy",
                    Module      = System.Diagnostics.Process.GetCurrentProcess().ProcessName,
                    ProcessId   = System.Diagnostics.Process.GetCurrentProcess().Id,
                    MachineName = Environment.MachineName,
                    Class       = AnalogyLogClass.General,
                    User        = Environment.UserName,
                    Date        = DateTime.Now
                };
                messagesHandler.AppendMessage(m, Environment.MachineName);
                return(new List <AnalogyLogMessage>()
                {
                    m
                });
            }
        }
        public async Task TestWriteAndRead()
        {
            string fileName = "test.bin";

            cancellationTokenSource = new CancellationTokenSource();
            AnalogyMessagePackFormat msgPack   = new AnalogyMessagePackFormat();
            List <AnalogyLogMessage> originals = new List <AnalogyLogMessage>
            {
                new AnalogyLogMessage("test1", AnalogyLogLevel.Critical, AnalogyLogClass.General, "test"),
                new AnalogyLogMessage("test2", AnalogyLogLevel.Error, AnalogyLogClass.General, "test")
            };
            await msgPack.Save(originals, fileName);

            Assert.IsTrue(File.Exists(fileName));
            MessageHandlerForTesting handler = new MessageHandlerForTesting();
            var msg = (await msgPack.ReadFromFile(fileName, cancellationTokenSource.Token, handler)).ToList();

            Assert.IsTrue(msg.Count == 2);
            Assert.IsTrue(msg.First().Level == AnalogyLogLevel.Critical);
            Assert.IsTrue(msg.Skip(1).First().Text == "test2");
            File.Delete(fileName);
        }