예제 #1
0
        /// <summary>
        ///     下载代理数据
        /// </summary>
        /// <returns></returns>
        private ProxyItems DownloadProxyList(int sinceId, int count)
        {
            //创建一个BmobQuery查询对象
            BmobQuery query = new BmobQuery();

            //查询playerName的值为bmob的记录
            query.WhereEqualTo("isvip", false);
            query.Limit(count);
            query.Skip(sinceId);

            ProxyItems items = new ProxyItems();

            var future = Bmob.FindTaskAsync <ProxyServers>(ProxyServers.TABLE_NAME, query);

            //对返回结果进行处理
            var list = future.Result.results;

            if (list != null && list.Count > 0)
            {
                items.items = new List <ProxyServer>();
                foreach (var model in list)
                {
                    var proxy = model.Get();
                    items.items.Add(proxy);
                }
            }
            else
            {
                items = null;
            }


            return(items);
        }
예제 #2
0
        /// <summary>
        ///     下载代理
        /// </summary>
        /// <returns></returns>
        public bool DownloadProxyList()
        {
            try
            {
                CloudProxyData.CloudProxyList.Clear();

                ProxyItems result = Config.MyApiHelper.DownloadProxyList();

                if (result != null && result.items.Count > 0)
                {
                    List <ProxyServer> proxies = result.items;
                    lock (CloudProxyData.CloudProxyList)
                    {
                        CloudProxyData.CloudProxyList = (from row in proxies
                                                         select row).Distinct().ToList();
                    }

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteException(ex);
                return(false);
            }
            finally
            {
                Config.LateUpdateProxyListTime = DateTime.Now;
            }
        }
예제 #3
0
        /// <summary>
        /// 下载代理数据
        /// </summary>
        /// <returns></returns>
        public ProxyItems DownloadProxyList()
        {
            var sw     = new Stopwatch();
            var result = new ProxyItems {
                items = new List <ProxyServer>()
            };

            _proxyItems = new ProxyItems {
                items = new List <ProxyServer>()
            };

            try
            {
                sw.Start();
                var totalCount = GetTotalProxyCount();
                if (totalCount > 0)
                {
                    const int pageSize = 1000;                          //每次取的数量
                    var       page     = totalCount / pageSize;
                    page = totalCount % pageSize > 0 ? page + 1 : page; //总页数

                    #region 单线程

                    //for (var i = 0; i < page; i++)
                    //{
                    //    proxyItems = DownloadProxyList(i * pageSize, pageSize);
                    //    if (null != proxyItems && proxyItems.items != null)
                    //    {
                    //        result.items = result.items.AsEnumerable().Union(proxyItems.items.AsEnumerable()).Distinct().ToList<ProxyServer>();
                    //    }
                    //}

                    #endregion

                    #region 多线程

                    _worker = new Worker(new object[] { page, pageSize });
                    _worker.Worker_Started   += WorkStart;     //工作开始
                    _worker.Worker_Completed += WorkCompleted; //工作结束
                    _worker.Start();
                    while (_worker.ReturnValue == null)
                    {
                        if (sw.Elapsed.Minutes > 2)
                        {
                            sw.Stop();
                            return(result);
                        }
                    }
                    result = (ProxyItems)_worker.ReturnValue;

                    #endregion
                }
                sw.Stop();
            }
            catch
            {
            }
            return(result);
        }
예제 #4
0
        /// <summary>
        ///     线程工作内容
        /// </summary>
        /// <param name="WorkThread"></param>
        /// <param name="arg"></param>
        private void WorkThread_DoWork(object WorkThread, EventArgs arg)
        {
            var        workThread = (WorkThread)WorkThread;
            var        sinceId    = (int)workThread.Parameters[0];
            var        count      = (int)workThread.Parameters[1];
            ProxyItems items      = DownloadProxyList(sinceId, count);

            if (null != items && items.items != null)
            {
                _proxyItems.items = items.items.AsEnumerable().Union(_proxyItems.items.AsEnumerable()).Distinct().ToList();
            }
        }