BlipFace.Service.Communication.BlipCommunication.GetShortLink C# (CSharp) Метод

GetShortLink() публичный Метод

Pobiera prawdziwego linka dla podanego skrótu
public GetShortLink ( string code ) : string
code string
Результат string
        public string GetShortLink(string code)
        {
            string query = string.Format("shortlinks/{0}", code);
            //todo: zamiast query stringa w postaci stringa to lepiej zastosować klasę HttpQueryString

            BlipCommunicationState state = BlipCommunicationState.OK;
            Exception exp = null;
            HttpStatusCode httpCode = HttpStatusCode.OK;

            HttpResponseMessage resp = null;
            string link = null;
            EventWaitHandle waitHandle = new AutoResetEvent(false);
            try
            {
                ThreadPool.QueueUserWorkItem(
                    c =>
                        {
                            //po testach wydaje się że ten lock nie potrzebny
                            // a może jednak potrzebny -
                            //todo: zbadać to lepiej
                            try
                            {
                                lock (httpSyncClientLock)
                                {
                                    resp = blipHttpClientSync.Get(query);
                                }
                            }

                            catch (Exception)
                            {
                                //gdy wystąpiły jakieś błędy w komunikacji
                            }
                            finally
                            {
                                waitHandle.Set();
                            }
                        }
                    );

                waitHandle.WaitOne(WebGetTimout);

                //sprawdzamy czy komunikacja się powiodła
                //todo: trochę to niebezpiecznie, na razie zostawiam
                if (resp != null && resp.StatusCode == HttpStatusCode.OK)
                {
                    resp.EnsureStatusIsSuccessful();

                    var blipLink = resp.Content.ReadAsJsonDataContract<BlipShortLink>();
                    link = blipLink.OriginalLink;
                }
            }
            catch (ArgumentOutOfRangeException aorEx)
            {
                state = BlipCommunicationState.CommunicationError;
                if (resp != null) httpCode = resp.StatusCode;
                //gdy wystąpiły jakieś błędy w komunikacji
            }
            catch (SerializationException serEx)
            {
                state = BlipCommunicationState.CommunicationError | BlipCommunicationState.Error;
                if (resp != null) httpCode = resp.StatusCode;
                exp = serEx;
            }
            catch (Exception ex)
            {
                state = BlipCommunicationState.Error;
                exp = ex;
            }
            finally
            {
                if (resp != null)
                {
                    resp.Dispose();
                    resp = null;
                }
            }

            if (((state & BlipCommunicationState.CommunicationError) == BlipCommunicationState.CommunicationError)
                && CommunicationError != null)
            {
                CommunicationError(null, new CommunicationErrorEventArgs(httpCode, BlipActions.AfterGetShortLink));
            }

            if ((state & BlipCommunicationState.Error) == BlipCommunicationState.Error && ExceptionOccure != null)
            {
                ExceptionOccure(null, new ExceptionEventArgs(exp));
            }

            //zwróc link, nie ważcne czy będzie null czy miał ustawioną wartość
            return link;
        }