private void ListenerMessageReceived(IUdpTransportMessage context) { string response = $"Received from {context.Address}:{context.Port}: {context.Message.Text}"; logger.LogInformation(response); speaker.Send(UdpMessageFactory.CreateUdpMessage(response), context.Address, context.Port); }
private void DoWork(object state) { string messageText = $"Sending from Udp.TimedSender at {DateTimeOffset.Now}"; logger.LogInformation($"Broadcasting message [{messageText}] to port {speaker.SpeakerConfig.BroadcastPort}"); IUdpMessage message = UdpMessageFactory.CreateUdpMessage(messageText); IUdpTransportMessage response = speaker.BroadcastWithResponse(message, speaker.SpeakerConfig.BroadcastPort); logger.LogInformation($"Received response from {response.Address}:{response.Port}: [{response.Message.Text}]"); }
public IActionResult OnPost() { logger.LogInformation($"Broadcasting message [{Message}] to port {speaker.SpeakerConfig.BroadcastPort}"); IUdpMessage message = UdpMessageFactory.CreateUdpMessage(Message); IUdpTransportMessage response = speaker.BroadcastWithResponse(message, speaker.SpeakerConfig.BroadcastPort); Status = $"Received response from {response.Address}:{response.Port}: [{response.Message.Text}]"; logger.LogInformation(Status); return(Page()); }
//ReceiveCallback will be called asynchronously private void ReceiveCallback(IAsyncResult ar) { UdpState state = (UdpState)ar.AsyncState; UdpClient stateClient = state.client; IPEndPoint stateEndPoint = state.endPoint; try { IPEndPoint receiveEndPoint = new(IPAddress.Any, ListenerConfig.BroadcastPort); byte[] receivedBytes = stateClient.EndReceive(ar, ref receiveEndPoint); try { string receivedString = Encoding.UTF8.GetString(receivedBytes); //Translate the incoming IUdpMessage to a IUdpTransport IUdpMessage message = JsonSerializer.Deserialize <UdpMessage>(receivedString); IUdpTransportMessage transportMessage = message.ToUdpTransportMessage(receiveEndPoint.Address, receiveEndPoint.Port); //Post this message as an event MessageReceived?.Invoke(transportMessage); } catch (Exception ex) { logger.LogError(ex.Message); } finally { //Start receiving again _ = stateClient.BeginReceive(new AsyncCallback(ReceiveCallback), state); } } catch (ObjectDisposedException) { //This is, according to Microsoft, a perfectly normal way of ending a BeginReceive when closing the socket //https://social.msdn.microsoft.com/Forums/en-US/18a48d01-108c-4eff-b19e-bb59645d42f8/closing-a-socket-connection-created-using-udp-client?forum=vcgeneral logger.LogInformation($"Closed connection."); } }