Steamp3.Shoutcast.ReadCallback C# (CSharp) Method

ReadCallback() private method

private ReadCallback ( IAsyncResult ar ) : void
ar IAsyncResult
return void
        private void ReadCallback(IAsyncResult ar)
        {
            try
            {
                RequestState requestState = (RequestState)ar.AsyncState;
                Stream responseStream = requestState.ResponseStream;
                int bytes = responseStream.EndRead(ar);

                if (bytes > 0)
                {
                    for (int i = 0; i < bytes; i++)
                    {
                        if (requestState.MetaLength != 0)
                        {
                            requestState.MetaHeader += Convert.ToChar(requestState.Buffer[i]);
                            requestState.MetaLength--;

                            if (requestState.MetaLength <= 0)
                            {
                                string title = Regex.Match(requestState.MetaHeader, "(StreamTitle=')(.*)(';StreamUrl)").Groups[2].Value.Trim();

                                responseStream.Close(); //?
                                AllDone.Set(); //?

                                OnTitleReceived(title);
                                return;
                            }
                        }
                        else
                        {
                            if (Math.Max(System.Threading.Interlocked.Increment(ref requestState.MetaCount), requestState.MetaCount - 1) >= requestState.MetaInt)
                            {
                                requestState.MetaLength = Convert.ToInt32(requestState.Buffer[i]) * 16;
                                requestState.MetaCount = 0;
                            }
                        }
                    }

                    responseStream.BeginRead(requestState.Buffer, 0, RequestState.BufferSize, new AsyncCallback(ReadCallback), requestState);
                    return;
                }
                else
                {
                    responseStream.Close();
                }
            }
            catch { }

            AllDone.Set();
        }