Esempio n. 1
0
        /// <inheritdoc />
        public override async Task WorkAsync(string[] args, CancellationToken cancellationToken)
        {
            try
            {
                var beaconPort = ConfigurationManager.AppSettings["UdpBeaconPort"];
                if (!int.TryParse(beaconPort, out var parsedBeaconPort))
                {
                    Logger.Error($"{beaconPort} is not a valid value for BeaconPort");
                    return;
                }

                var targetEndpoint = new IPEndPoint(IPAddress.Broadcast, parsedBeaconPort);
                var datagram       = Encoding.UTF8.GetBytes($"Agent [{ConfigurationManager.AppSettings["AgentName"]}] is alive.");

                using (var broadcaster = new UdpClient())
                {
                    broadcaster.AllowNatTraversal(true);

                    while (!cancellationToken.IsCancellationRequested)
                    {
                        Logger.Debug($"---> [{targetEndpoint.Prettify()}] {Encoding.UTF8.GetString(datagram)}");
                        await broadcaster.SendAsync(datagram, datagram.Length, targetEndpoint);

                        if (!int.TryParse(ConfigurationManager.AppSettings["UdpBeaconPollingInterval"], out var pollingInterval))
                        {
                            pollingInterval = 10000;
                        }

                        await Task.Delay(pollingInterval, cancellationToken);
                    }
                }

                Logger.Info("Beacon terminating.");
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }