Example #1
0
        private async Task ReceiveFromAsync(MulticastClient client)
        {
            while (IsRunning)
            {
                try
                {
                    var result = await client.Udp.ReceiveAsync();

                    var message = MessageParser.Decode(result.Buffer);

                    if (message.Type == MessageType.Query &&
                        message.Questions.Any(q => q.QType == QType.PTR && q.QName == $"{ServiceType}.{Domain}."))
                    {
                        var response = CreateMessage(message.Id, 120, client.Adapter.Ipv4Address);
                        var packet   = MessageParser.Encode(response);
                        await client.Udp.SendAsync(packet, packet.Length, result.RemoteEndPoint);
                    }
                }
                catch (ObjectDisposedException e)
                {
                    if (e.InnerException is TaskCanceledException)
                    {
                    }
                }
                catch (Exception)
                {
                }
            }
        }
        private async Task ReceiveFromAsync(UdpClient client)
        {
            while (IsRunning)
            {
                try
                {
                    var result = await client.ReceiveAsync();

                    var message = MessageParser.Decode(result.Buffer);
                    _logger.Trace($"Got\n{message}");

                    if (message.Type == MessageType.Response &&
                        message.AuthoriativeAnswer &&
                        message.ResponseCode == ResponseCode.NoError)
                    {
                        Handle(message);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }