Example #1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            using UdpClient listener = new UdpClient(_listenerConfig.Port);
            UdpHelper.ConfigureSocket(listener);

            _logger.LogInformation($"Listening on {_listenerConfig.Port}");

            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    _logger.LogInformation("Waiting for broadcast");

                    var receiveResult = await listener.ReceiveAsync();

                    IPEndPoint remoteEP = receiveResult.RemoteEndPoint;
                    byte[]     bytes    = receiveResult.Buffer;

                    _logger.LogInformation($"Received payload from {remoteEP}");

                    var command = TryGetCommand(bytes);
                    if (command == null)
                    {
                        await Reply(listener, remoteEP, "Cannot read payload");
                    }
                    else
                    {
                        var response = _commandExecutorService.ExecuteCommand(command);
                        await Reply(listener, remoteEP, response);
                    }
                }
                catch (SocketException e)
                {
                    _logger.LogError(e, "socket error");
                    throw e;
                }
            }
        }