Ejemplo n.º 1
0
        private static Task PressEscToExit(ConsoleMessageHandler handler)
        {
            return(Task.Run(() =>
            {
                SystemConsole.WriteLine(@"Press:
P to print processed message count
C to clear screen
R to reset counter
ESC to exit");

                ConsoleKey key;
                while ((key = SystemConsole.ReadKey(true).Key) != ConsoleKey.Escape)
                {
                    switch (key)
                    {
                    case ConsoleKey.C:
                        handler.Clear();
                        continue;

                    case ConsoleKey.R:
                        handler.Reset();
                        continue;

                    case ConsoleKey.P:
                        SystemConsole.WriteLine(handler.GetCount());
                        continue;
                    }
                }
            }));
        }
Ejemplo n.º 2
0
        public static int Main(string[] args)
        {
            var loggerProvider = new ConsoleLoggerProvider((s, level) => true, false);
            var source         = new CancellationTokenSource();

            var logger = new ConsoleMessageHandler();

            var syslogServer = new UdpSyslogServer( // DI?
                new LoggerRawMessageHandler(
                    new ParserRawMessageHandler(
                        new RegexSyslogMessageParser(TimeSpan.FromSeconds(1)),
                        logger),
                    loggerProvider.CreateLogger(nameof(LoggerRawMessageHandler)))
                );

            var exitKeyTask = PressEscToExit(logger);

            try
            {
                var syslogServerTask = syslogServer.Start(source.Token);
                Task.WaitAny(syslogServerTask, exitKeyTask);

                source.Cancel();
                syslogServerTask.Wait(TimeSpan.FromSeconds(3)); // throws errors from syslogServer, if any
                return(0);
            }
            catch (AggregateException aggEx)
            {
                if (aggEx.InnerExceptions.Any(p => p is OperationCanceledException))
                {
                    return(0);
                }
                throw;
            }
        }