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); } } }