public static ExitCode Start(Settings settings) { try { StringBuilder startMessage = new StringBuilder(); Ticks startTime = DateTime.UtcNow.Ticks; s_settings = settings ?? throw new ArgumentNullException(nameof(settings)); startMessage.AppendLine(); startMessage.AppendLine($"Establishing forward to InfluxDB HIDS \"{s_settings.InfluxDBEndPoint}\" from STTP data received from \"{s_settings.STTPEndPoint}\":"); startMessage.AppendLine(); startMessage.AppendLine($" Current EXE Path: {FilePath.HostApplicationPath}"); startMessage.AppendLine($" Using Read Key: {s_settings.UseReadKey}"); startMessage.AppendLine($" Window Size: {s_settings.WindowSize:N0}ms"); startMessage.AppendLine($" Token ID: {s_settings.TokenID}"); startMessage.AppendLine($" Point Bucket: {s_settings.PointBucket}"); startMessage.AppendLine($" Organization ID: {s_settings.OrganizationID}"); startMessage.AppendLine($" Filter Expression: {s_settings.FilterExpression}"); startMessage.AppendLine(); startMessage.AppendLine($"Press any key to stop..."); StatusMessage(startMessage.ToString()); s_displayInterval = TimeSpan.FromMilliseconds(s_settings.WindowSize * 2).Ticks; using PointQueue pointQueue = CreatePointQueue(); using API hidsAPI = ConnectHIDSClient(); using SubscriberHandler subscriber = ConnectSTTPClient(); if (s_settings.UseReadKey) { Console.ReadKey(); } else { Thread.Sleep(Timeout.Infinite); } subscriber.Disconnect(); hidsAPI.Disconnect(); StatusMessage($"Total process runtime: {(DateTime.UtcNow.Ticks - startTime).ToElapsedTimeString(3)}"); return(ExitCode.Success); } catch (Exception ex) { ErrorMessage($"ERROR: {ex.Message}"); return(ExitCode.Exception); } }
private static SubscriberHandler ConnectSTTPClient() { ValidateEndPoint(s_settings.STTPEndPoint, out string host, out ushort port); SubscriberHandler subscriberHandler = new SubscriberHandler { DisplayInterval = s_displayInterval, HandleStatusMessage = StatusMessage, HandleErrorMessage = ErrorMessage, HandleReceivedMetadata = HandleReceivedMetadata, HandleReceivedMeasurement = HandleReceivedMeasurement, FilterExpression = s_settings.FilterExpression }; subscriberHandler.Initialize(host, port); subscriberHandler.ConnectAsync(); return(subscriberHandler); }