Beispiel #1
0
        static void Main(string[] args)
        {
            var logger = LogManager.GetCurrentClassLogger();

            logger.Log(LogLevel.Info, "Starting...");
            try
            {
                var config = new ConfigurationBuilder()
                             .SetBasePath(System.IO.Directory.GetCurrentDirectory()) //From NuGet Package Microsoft.Extensions.Configuration.Json
                             .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                             .Build();

                var servicesProvider = BuildDi(config);
                using (servicesProvider as IDisposable)
                {
                    ILoggerFactory factory = servicesProvider.GetService <ILoggerFactory>();
                    Parser.Default.ParseArguments <Options>(args)
                    .WithParsed(o =>
                    {
                        //wait for exit signal
                        Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) {
                            e.Cancel = true;
                            _closeWait.Set();
                        };

                        SerialSettings settings = new SerialSettings();
                        settings.Handshake      = o.Handshake;
                        settings.BaudRate       = o.BaudRate;
                        settings.PortName       = o.PortName;
                        settings.DataBits       = o.DataBits;
                        settings.Parity         = o.Parity;
                        settings.StopBits       = o.StopBits;
                        settings.ReadTimeout    = o.ReadTimeout;
                        settings.WriteTimeout   = o.WriteTimeout;

                        _instance = new DotnetNMEACLI(settings, factory);

                        _closeWait.WaitOne();
                    });
                }
            }
            catch (Exception ex)
            {
                // NLog: catch any exception and log it.
                logger.Error(ex, "Stopped program because of exception");
                throw;
            }
            finally
            {
                logger.Log(LogLevel.Info, "Stopping...");

                // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
                LogManager.Shutdown();
            }
        }
Beispiel #2
0
 /// <summary>
 /// Constructor for DotnetNMEACLI instace, currently only supports serial sources.
 /// </summary>
 /// <param name="settings">All serial settings needed to open up the serial port and start reading NMEA0183 data</param>
 /// <param name="loggerFactory">Logger Factory used to created logger instances</param>
 public DotnetNMEACLI(SerialSettings settings, ILoggerFactory loggerFactory)
 {
     _logger              = loggerFactory.CreateLogger <DotnetNMEACLI>();
     _lineParser          = new NMEA0183Parser();
     _lineEmitter         = new SerialLineReader(settings);
     _lineEmitter.OnLine += (line) =>
     {
         try
         {
             var message = _lineParser.Parse(line);
             _logger.LogInformation("Parsed message with speaker {0} and type {1}", message.Speaker,
                                    message.Type);
         }
         catch (Exception e)
         {
             _logger.LogError("Exception while parsing line: {0}", e.Message);
         }
     };
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        public SerialLineReader(SerialSettings settings)
        {
            _cancelTokenSource       = new CancellationTokenSource();
            _dataWaitHandle          = new EventWaitHandle(false, EventResetMode.ManualReset);
            _serialPort              = new SerialPort();
            _serialPort.PortName     = settings.PortName;
            _serialPort.BaudRate     = settings.BaudRate;
            _serialPort.Parity       = settings.Parity;
            _serialPort.DataBits     = settings.DataBits;
            _serialPort.StopBits     = settings.StopBits;
            _serialPort.Handshake    = settings.Handshake;
            _serialPort.ReadTimeout  = settings.ReadTimeout;
            _serialPort.WriteTimeout = settings.WriteTimeout;

            _serialPort.DataReceived += (sender, args) => _dataWaitHandle.Set();

            _serialPort.Open();
            _readTask = Read();
        }