private static async void BeginReceiveMessageLoop()
        {
            while (IsJoined)
            {
                UdpAnySourceMulticastClientReceieveFromGroupResult result;
                try
                {
                    result = await _client.ReceiveFromGroupAsync(_receiveBuffer, 0, _receiveBuffer.Length);
                }
                catch
                {
                    return;
                }

                // Parse the incoming message
                Message message;
                try
                {
                    message = Message.FromBytes(_receiveBuffer, 0, result.Length);
                }
                catch
                {
                    _log.Info("Dropped malformed packet from " + result.Source);
                    return;
                }

                _log.Debug("Received " + message.Summary);
                _log.Trace("Message details (received from {0}):\n{1}", result.Source, message.ToString());

                SendMessageToListeners(message);
            }
        }