private void Client_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e) { messageReceivingTopics.Add(e.ApplicationMessage.Topic); ByteQueue queue = e.ApplicationMessage.Payload; try { switch (e.ApplicationMessage.Topic) { case nameof(AllSongsShuffled): AllSongsShuffled = queue.DequeueSongs(); break; case nameof(AudioData): AudioData = queue; break; case nameof(CurrentSong): CurrentSong = queue.DequeueSong(); break; case nameof(Duration): Duration = queue.DequeueTimeSpan(); break; case nameof(Format): Format = queue.DequeueWaveFormat(); break; case nameof(IsAllShuffle): IsAllShuffle = queue.DequeueBool(); break; case nameof(IsOnlySearch): IsOnlySearch = queue.DequeueBool(); break; case nameof(IsSearchShuffle): IsSearchShuffle = queue.DequeueBool(); break; case nameof(MediaSources): MediaSources = queue.DequeueStrings(); break; case nameof(PlayState): PlayState = queue.DequeuePlayState(); break; case nameof(Position): Position = queue.DequeueTimeSpan(); break; case nameof(SearchKey): SearchKey = queue.DequeueString(); break; case nameof(Volume): Volume = queue.DequeueFloat(); break; } } catch (Exception exc) { try { MqttApplicationMessage message = new MqttApplicationMessage() { Topic = "Debug", Payload = Encoding.UTF8.GetBytes(Utils.GetTypeMessageAndStack(exc)), QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce, Retain = true }; client.PublishAsync(message); } catch { } } if (initProps != null && initProps.Contains(e.ApplicationMessage.Topic)) { lock (initProps) { initProps.Remove(e.ApplicationMessage.Topic); Monitor.Pulse(initProps); } } messageReceivingTopics.Remove(e.ApplicationMessage.Topic); }