コード例 #1
0
        private void PublishDuration()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(Duration);

            Publish(nameof(Duration), queue);
        }
コード例 #2
0
        private void PublishServiceVolume()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(Volume);

            Publish(nameof(Volume), queue);
        }
コード例 #3
0
        private void PublishAllSongsShuffled()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(AllSongsShuffled);

            Publish(nameof(AllSongsShuffled), queue);
        }
コード例 #4
0
        protected override void OnPlayStateChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(PlayState);

            Publish(nameof(PlayState), queue);
        }
コード例 #5
0
        protected override void OnPositionChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(Position);

            Publish(nameof(Position), queue);
        }
コード例 #6
0
        protected override void OnIsSearchShuffleChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(IsSearchShuffle);

            Publish(nameof(IsSearchShuffle), queue);
        }
コード例 #7
0
        protected override void OnMediaSourcesChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(MediaSources);

            Publish(nameof(MediaSources), queue);
        }
コード例 #8
0
        private void PublishPosition()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(Position);

            Publish(nameof(Position), queue);
        }
コード例 #9
0
        protected override void OnIsOnlySearchChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(IsOnlySearch);

            Publish(nameof(IsOnlySearch), queue);
        }
コード例 #10
0
        private void PublishIsOnlySearch()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(IsOnlySearch);

            Publish(nameof(IsOnlySearch), queue);
        }
コード例 #11
0
        private void PublishSearchKey()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(SearchKey);

            Publish(nameof(SearchKey), queue);
        }
コード例 #12
0
        private void PublishPlayState()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(PlayState);

            Publish(nameof(PlayState), queue);
        }
コード例 #13
0
        private void PublishIsSearchShuffle()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(IsSearchShuffle);

            Publish(nameof(IsSearchShuffle), queue);
        }
コード例 #14
0
        protected override void OnSearchKeyChanged()
        {
            ByteQueue queue = new ByteQueue();

            queue.Enqueue(SearchKey);

            Publish(nameof(SearchKey), queue);
        }
コード例 #15
0
        protected override void OnCurrentSongChanged()
        {
            ByteQueue queue = new ByteQueue();

            if (CurrentSong.HasValue)
            {
                queue.Enqueue(CurrentSong.Value);
            }

            Publish(nameof(CurrentSong), queue);
        }
コード例 #16
0
        private void PublishCurrentSong()
        {
            ByteQueue queue = new ByteQueue();

            if (CurrentSong.HasValue)
            {
                queue.Enqueue(CurrentSong.Value);
            }

            Publish(nameof(CurrentSong), queue);
        }
コード例 #17
0
        private void PublishMediaSources()
        {
            ByteQueue queue = new ByteQueue();

            if (MediaSources != null)
            {
                queue.Enqueue(MediaSources);
            }

            Publish(nameof(MediaSources), queue);
        }
コード例 #18
0
        private void PublishFormat()
        {
            ByteQueue queue = new ByteQueue();

            if (Format != null)
            {
                queue.Enqueue(Format);
            }

            Publish(nameof(Format), queue, MqttQualityOfServiceLevel.AtLeastOnce);
        }
コード例 #19
0
        private void OnApplicationMessageInterception(MqttApplicationMessageInterceptorContext context)
        {
            if (context.ClientId == null)
            {
                return;
            }

            messageInterceptingTopics.Add(context.ApplicationMessage.Topic);

            ByteQueue queue = context.ApplicationMessage.Payload;

            try
            {
                switch (context.ApplicationMessage.Topic)
                {
                case nameof(AllSongsShuffled):
                    Reload();

                    queue = new ByteQueue();
                    queue.Enqueue(AllSongsShuffled);
                    context.ApplicationMessage.Payload = queue;
                    break;

                case nameof(CurrentSong):
                    CurrentSong = queue.Any() ? (Song?)queue.DequeueSong() : null;
                    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.Any() ? queue.DequeueStrings() : null;
                    break;

                case nameof(PlayState):
                    PlayState = queue.DequeuePlayState();
                    break;

                case nameof(Position):
                    Position = queue.DequeueTimeSpan();
                    break;

                case nameof(SearchKey):
                    SearchKey = queue.Any() ? queue.DequeueString() : null;
                    break;

                case nameof(Volume):
                    Volume = queue.DequeueFloat();
                    break;

                default:
                    context.AcceptPublish = false;
                    break;
                }
            }
            catch (Exception e)
            {
                context.AcceptPublish = false;

                try
                {
                    MqttApplicationMessage message = new MqttApplicationMessage()
                    {
                        Topic   = "Debug",
                        Payload = Encoding.UTF8.GetBytes(Utils.GetTypeMessageAndStack(e)),
                        QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,
                        Retain = true
                    };

                    server.PublishAsync(message);
                }
                catch { }
            }

            messageInterceptingTopics.Remove(context.ApplicationMessage.Topic);
        }
コード例 #20
0
        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);
        }