private void StartStressTest() { if (m_HttpRequestRecords != null) { int maxConcurrenRequests; int.TryParse(mtxtMaxConcurrentRequests.Text, out maxConcurrenRequests); int minSleepTime; int.TryParse(mtxtSleepMin.Text, out minSleepTime); int maxSleepTime; int.TryParse(mtxtSleepMax.Text, out maxSleepTime); Random random = new Random(); List <HttpRequestWorker> httpRequestWorkers = CreateHttpRequestWorkers(maxSleepTime, random, minSleepTime); m_Running = true; StartHttpRequestWorkerQueue(maxConcurrenRequests); Timer timer = new Timer(TimeSpan.FromMinutes(Convert.ToInt32(nudDurationInMinutes.Value)).TotalMilliseconds) { AutoReset = false }; timer.Elapsed += (o, args) => { m_Running = false; //TODO: Set status as shutting down StopHttpRequestWorkerQueue(false); }; timer.Start(); const int maxQueueLength = 10000; int addedRequests = 0; while (true) { if (!m_Running) { break; } for (int i = 0; i < httpRequestWorkers.Count; i++) { if (addedRequests >= maxQueueLength) { break; } HttpRequestWorker httpRequestWorker = httpRequestWorkers[i]; m_HttpRequestWorkerQueue.EnqueueHttpRequestWorker(httpRequestWorker); addedRequests++; } } } }
public void Info(Action <Tuple <Result, Person> > callback) { if (callback == null) { throw new ArgumentNullException("callback"); } string url = String.Format(@"http://open.t.qq.com/api/user/info?" + "format=xml&access_token={0}&openid={1}&oauth_version=2.a" + "&oauth_consumer_key={2}", m_accountDetail.ACCESS_TOKEN, m_accountDetail.OPEN_ID, m_accountDetail.APP_KEY); HttpRequestWorker.Get(url, (content) => { Result result = new Result(); Person person = new Person(); XDocument xml = XDocument.Parse(content); XElement eleData = xml.Root.Element("data"); if (eleData != null) { person.Name = eleData.Element("name").Value; person.NickName = eleData.Element("nick").Value; person.Birthday = new DateTime( Convert.ToInt32(eleData.Element("birth_year").Value), Convert.ToInt32(eleData.Element("birth_month").Value), Convert.ToInt32(eleData.Element("birth_day").Value)); person.Experience = Convert.ToInt32(eleData.Element("exp").Value); person.Country = String.IsNullOrEmpty(eleData.Element("country_code").Value) ? 0 : Convert.ToInt32(eleData.Element("country_code").Value); person.Province = String.IsNullOrEmpty(eleData.Element("province_code").Value) ? 0 : Convert.ToInt32(eleData.Element("province_code").Value); person.City = String.IsNullOrEmpty(eleData.Element("city_code").Value) ? 0 : Convert.ToInt32(eleData.Element("city_code").Value); person.FansNum = Convert.ToInt32(eleData.Element("fansnum").Value); person.FavNum = Convert.ToInt32(eleData.Element("favnum").Value); person.IdolNum = Convert.ToInt32(eleData.Element("idolnum").Value); person.Industry = Convert.ToInt32(eleData.Element("industry_code").Value); person.Introduction = eleData.Element("introduction").Value; person.IsEnt = Convert.ToBoolean(Convert.ToInt32(eleData.Element("isent").Value)); person.IsMyBlack = Convert.ToBoolean(Convert.ToInt32(eleData.Element("ismyblack").Value)); person.IsMyFans = Convert.ToBoolean(Convert.ToInt32(eleData.Element("ismyfans").Value)); person.IsMyIdol = Convert.ToBoolean(Convert.ToInt32(eleData.Element("ismyidol").Value)); person.IsRealName = Convert.ToBoolean(Convert.ToInt32(eleData.Element("isrealname").Value)); person.IsVip = Convert.ToBoolean(Convert.ToInt32(eleData.Element("isvip").Value)); person.Level = Convert.ToInt32(eleData.Element("level").Value); person.MutualFansNum = Convert.ToInt32(eleData.Element("mutual_fans_num").Value); person.OpenId = eleData.Element("openid").Value; person.RegTime = new DateTime(1970, 1, 1).AddSeconds(Convert.ToInt32(eleData.Element("regtime").Value)); person.Sex = (Sex)Convert.ToInt32(eleData.Element("sex").Value); } result.ErrCode = Convert.ToInt32(xml.Root.Element("errcode").Value); result.Msg = xml.Root.Element("msg").Value; result.Ret = Convert.ToInt32(xml.Root.Element("ret").Value); callback(new Tuple <Result, Person>(result, person)); }); }
public void FansList(int reqNum, int index, Mode mode, Action <Tuple <Result, List <Person> > > callback, int page = 0, AutoResetEvent autoResetEvent = null) { if (callback == null) { throw new ArgumentNullException("callback"); } string url = String.Format("https://open.t.qq.com/api/friends/fanslist?" + "format=xml&reqnum={0}&startindex={1}&mode={2}" + "&oauth_consumer_key={3}&access_token={4}" + "&openid={5}&oauth_version=2.a", reqNum, index, (int)mode, m_accountDetail.APP_KEY, m_accountDetail.ACCESS_TOKEN, m_accountDetail.OPEN_ID); HttpRequestWorker.Get(url, (content) => { Result result = new Result(); List <Person> personList = new List <Person>(); XDocument xml = XDocument.Parse(content); XElement eleData = xml.Root.Element("data"); if (eleData != null) { int curNum = Convert.ToInt32(eleData.Element("curnum").Value); int hasNext = Convert.ToInt32(eleData.Element("hasnext").Value); foreach (XElement eleInfo in eleData.Elements("info")) { Person person = new Person(); person.Name = eleInfo.Element("name").Value; person.NickName = eleInfo.Element("nick").Value; person.FansNum = Convert.ToInt32(eleInfo.Element("fansnum").Value); person.IdolNum = Convert.ToInt32(eleInfo.Element("idolnum").Value); person.IsMyFans = bool.Parse(eleInfo.Element("isfans").Value); person.IsMyIdol = bool.Parse(eleInfo.Element("isidol").Value); person.IsRealName = Convert.ToBoolean(Convert.ToInt32(eleInfo.Element("isrealname").Value)); person.IsVip = Convert.ToBoolean(Convert.ToInt32(eleInfo.Element("isvip").Value)); person.OpenId = eleInfo.Element("openid").Value; person.Sex = (Sex)Convert.ToInt32(eleInfo.Element("sex").Value); personList.Add(person); } } result.ErrCode = Convert.ToInt32(xml.Root.Element("errcode").Value); result.Msg = xml.Root.Element("msg").Value; result.Ret = Convert.ToInt32(xml.Root.Element("ret").Value); result.Page = page; result.AutoResetEvent = autoResetEvent; callback(new Tuple <Result, List <Person> >(result, personList)); }); }
private List <HttpRequestWorker> CreateHttpRequestWorkers(int maxSleepTime, Random random, int minSleepTime) { List <HttpRequestWorker> httpRequestWorkers = new List <HttpRequestWorker>(m_HttpRequestRecords.Count); for (int i = 0; i < m_HttpRequestRecords.Count; i++) { HttpRequestRecord httpRequestRecord = m_HttpRequestRecords[i]; HttpRequestWorker httpRequestWorker = new HttpRequestWorker( httpRequestRecord, maxSleepTime == 0 ? random.Next(0, minSleepTime) : random.Next(minSleepTime, maxSleepTime), 50); httpRequestWorker.HttpRequestProcessed += (worker, result) => { MethodInvoker addListViewItem = () => { ListViewItem item = new ListViewItem(result.HttpRequestRecord.Uri.ToString()); item.SubItems.Add(result.Success ? "Success" : "Fail"); item.SubItems.Add(GetHttpStatusText(result.HttpResponseStatusCode)); item.SubItems.Add(result.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture)); lvRequests.Items.Add(item); }; if (result.Success) { Interlocked.Increment(ref m_SuccessfulRequestCount); } if (lvRequests.InvokeRequired) { lvRequests.Invoke(new MethodInvoker(addListViewItem)); } else { addListViewItem(); } }; httpRequestWorkers.Add(httpRequestWorker); } return(httpRequestWorkers); }