コード例 #1
0
ファイル: MatrixDataProvider.cs プロジェクト: tu-tran/FareLiz
        /// <summary>
        /// The query data.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <param name="progressChangedHandler">
        /// The progress changed handler.
        /// </param>
        /// <returns>
        /// The <see cref="DataRequestResult"/>.
        /// </returns>
        public override DataRequestResult QueryData(FlightFareRequest request, JourneyProgressChangedEventHandler progressChangedHandler)
        {
            byte[] postData = this._generator.GeneratePOSTData(request);

            var httpRequest = (this._request_ + "1").GetRequest("POST");
            httpRequest.CookieContainer = new CookieContainer();
            httpRequest.Referer = this._root_;
            httpRequest.ContentLength = postData.Length;

            Stream stream = httpRequest.GetRequestStream();
            stream.Write(postData, 0, postData.Length);
            stream.Close();

            string tokenId = null;
            string requestId = null;

            using (var response = (HttpWebResponse)httpRequest.GetResponse())
            {
                string waitUri = response.ResponseUri.ToString();
                requestId = this.GetTicketId(response);
                response.Close();

                if (string.IsNullOrEmpty(requestId))
                {
                    return new DataRequestResult(DataRequestState.Failed, null);
                }

                var match = Regex.Match(waitUri, @"\?" + this._cookie_ + @"\=(?<id>.+?)\&", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    tokenId = match.Groups["id"].Value;
                }
                else
                {
                    var cookies = response.Cookies;
                    foreach (Cookie c in cookies)
                    {
                        if (c.Name == this._cookie_)
                        {
                            tokenId = c.Value;
                            break;
                        }
                    }
                }
            }

            DataRequestResult requestResult;
            do
            {
                requestResult = this.GetResult(requestId, tokenId, request);
            }
            while (requestResult.RequestState == DataRequestState.Pending || requestResult.RequestState == DataRequestState.Requested);

            return requestResult;
        }
コード例 #2
0
 /// <summary>
 /// Query fare data asynchronously
 /// </summary>
 /// <param name="request">
 /// </param>
 /// <param name="progressChangedHandler">
 /// The progress Changed Handler.
 /// </param>
 /// <returns>
 /// The <see cref="DataRequestResult"/>.
 /// </returns>
 public abstract DataRequestResult QueryData(FlightFareRequest request, JourneyProgressChangedEventHandler progressChangedHandler);