private bool HasReceived(PlaylistResponseMessage responseMessage)
        {
            bool result;
            var  token = responseMessage.GetResponseToken();

            if (_responseTokens.Contains(token))
            {
                result = true;
            }
            else
            {
                _responseTokens.Enqueue(token);
                result = false;
            }

            if (_responseTokens.Count > 100)
            {
                while (_responseTokens.Count > 50)
                {
                    _responseTokens.Dequeue();
                }
            }

            return(result);
        }
 private void OnResponseReceived(PlaylistResponseMessage responseMessage)
 {
     if (this.PlaylistResponseReceived != null)
     {
         this.PlaylistResponseReceived(this, new PlaylistResponseEventArgs(responseMessage));
     }
 }
        public void SendPlaylistResponse(Guid sender, Guid requestId, IPlayItem[] playItems, PlaylistRequestCategory requestCategory)
        {
            var responseId = Guid.NewGuid();

            var message = new PlaylistResponseMessage()
            {
                Category   = requestCategory,
                PlayItems  = playItems,
                ResponseId = responseId,
                Responser  = this.ServiceId,
                RequestId  = requestId,
                Sender     = sender
            };

            Send(message);
        }
        private void _messageParser_DataReceived(object sender, NetDataReceivedEventArgs e)
        {
            PlaylistRequestMessage requestMessage = null;

            try
            {
                requestMessage = Deserialize <PlaylistRequestMessage>(e.Data);
            }
            catch
            {
                requestMessage = null;
            }


            if (requestMessage != null)
            {
                PlaylistResponseMessage responseMessage = requestMessage as PlaylistResponseMessage;
                if (responseMessage != null)
                {
                    if (responseMessage.ResponseId != this.ServiceId && responseMessage.RequestId == this.ServiceId)
                    {
                        if (!HasReceived(responseMessage))
                        {
                            OnResponseReceived(responseMessage);
                        }
                    }
                }
                else
                {
                    if (requestMessage.Sender != this.ServiceId)
                    {
                        if (!HasReceived(requestMessage))
                        {
                            OnRequestReceived(requestMessage);
                        }
                    }
                }
            }
        }