Example #1
0
        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);
        }
Example #2
0
        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}]");
        }
Example #3
0
        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());
        }
Example #4
0
        //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.");
            }
        }