Пример #1
0
        private void DownloadTiles(object args)
        {
            var downloadFinished = args as ManualResetEvent;
            var doneEvents       = new MultipleThreadResetEvent(tileInfos.Count);

            foreach (var tileInfo in tileInfos)
            {
                object o = new object[] { tileInfo, doneEvents };
                ThreadPool.QueueUserWorkItem(DownloadTile, o);
            }
            doneEvents.WaitAll();
            if (downloadFinished != null)
            {
                downloadFinished.Set();
            }
        }
Пример #2
0
        private void DownloadTiles(object args)
        {
            var downloadFinished = args as ManualResetEvent;

            // Loop through the tiles, and filter tiles that are already on disk.
            var downloadTiles = new List <TileInfo>();

            for (var i = 0; i < _tiles.Count(); i++)
            {
                if (!_fileCache.Exists(_tiles[i].Index))
                {
                    downloadTiles.Add(_tiles[i]);
                }
                else
                {
                    // Read tiles from disk
                    var name = _fileCache.GetFileName(_tiles[i].Index);

                    // Determine age of tile...
                    var fi = new FileInfo(name);
                    if ((DateTime.Now - fi.LastWriteTime).Days <= _tileTimeOut)
                    {
                        continue;
                    }
                    File.Delete(name);
                    downloadTiles.Add(_tiles[i]);
                }
            }

            if (downloadTiles.Count > 0)
            {
                int count    = 1;
                int allCount = 100;
                while ((count - 1) * allCount < downloadTiles.Count)
                {
                    try
                    {
                        int temp = allCount;
                        if (count * allCount > downloadTiles.Count)
                        {
                            temp = downloadTiles.Count - (count - 1) * allCount;
                        }
                        var doneEvents = new MultipleThreadResetEvent(temp);
                        ThreadPool.SetMaxThreads(25, 25);
                        for (int i = 0; i < temp; i++)
                        {
                            TileInfo t = downloadTiles[(count - 1) * allCount + i];
                            object   o = new object[] { t, doneEvents };
                            ThreadPool.QueueUserWorkItem(DownloadTile, o);
                        }
                        doneEvents.WaitAll();
                        doneEvents.Dispose();
                        //Thread.Sleep(10);
                        count++;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("下载异常:" + ex.Message);
                    }
                }
            }

            if (downloadFinished != null)
            {
                downloadFinished.Set();
            }
        }
Пример #3
0
        private void DownloadTiles()
        {
            var downloadTiles = new List <TileInfo>();

            for (var i = 0; i < _tiles.Count(); i++)
            {
                if (!fileCache.Exists(_tiles[i].Index))
                {
                    downloadTiles.Add(_tiles[i]);
                }
            }

            if (downloadTiles.Count == 0)
            {
                MessageBox.Show("已经存在缓存文件,不需要缓存");
                return;
            }

            var diare = MessageBox.Show("一共需要下载" + downloadTiles.Count + "张切片,是否继续?", "下载地图", MessageBoxButtons.OKCancel);

            if (diare == DialogResult.Cancel)
            {
                return;
            }

            progressBar1.Minimum = 0;
            progressBar1.Maximum = downloadTiles.Count;
            progressBar1.Value   = 0;
            progressBar1.Step    = 50;

            if (downloadTiles.Count > 0)
            {
                int count    = 1;
                int allCount = 50;
                ThreadPool.SetMaxThreads(100, 100);
                while ((count - 1) * allCount < downloadTiles.Count)
                {
                    try
                    {
                        int temp = allCount;
                        if (count * allCount > downloadTiles.Count)
                        {
                            temp = downloadTiles.Count - (count - 1) * allCount;
                        }
                        var doneEvents = new MultipleThreadResetEvent(temp);
                        for (int i = 0; i < temp; i++)
                        {
                            TileInfo t = downloadTiles[(count - 1) * allCount + i];
                            object   o = new object[] { t, doneEvents };

                            ThreadPool.QueueUserWorkItem(DownloadTile, o);
                        }

                        int wt;
                        int ct;
                        ThreadPool.GetAvailableThreads(out wt, out ct);
                        if (wt < 15)
                        {
                            Thread.Sleep(5000);
                            continue;
                        }

                        doneEvents.WaitAll();
                        doneEvents.Dispose();
                        //Thread.Sleep(10);
                        progressBar1.PerformStep();
                        label4.Text = (allCount * count).ToString() + "/" + downloadTiles.Count;
                        Application.DoEvents();
                        count++;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("下载异常:" + ex.Message);
                    }
                }
                MessageBox.Show("下载完毕!");
            }
        }
Пример #4
0
        static void Main(string[] args)
        {
            MultipleThreadResetEvent multiple = new MultipleThreadResetEvent(500);
            var    ipsecs = File.ReadAllLines(Local + "ipsec.txt");
            var    total  = ipsecs.Length;
            double finish = 0;

            foreach (var ipsec in ipsecs)
            {
                Console.WriteLine("start:" + ipsec);
                IpList.Clear();
                var   ipqueue = new Queue <string>();
                var   ips     = ipsec.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                var   ip1strs = ips[0].Split('.');
                var   ip2strs = ips[1].Split('.');
                int[] ip1     = new int[4];
                int[] ip2     = new int[4];
                for (int i = 0; i < 4; i++)
                {
                    ip1[i] = Convert.ToInt32(ip1strs[i]);
                    ip2[i] = Convert.ToInt32(ip2strs[i]);
                }
                while (ip1[0] * 1000000000 + ip1[1] * 1000000 + ip1[2] * 1000 + ip1[3] <=
                       ip2[0] * 1000000000 + ip2[1] * 1000000 + ip2[2] * 1000 + ip2[3])
                {
                    var ip = ip1[0] + "." + ip1[1] + "." + ip1[2] + "." + ip1[3];
                    ipqueue.Enqueue(ip);
                    ip1[3]++;
                    if (ip1[3] == 256)
                    {
                        ip1[3] = 1;
                        ip1[2]++;
                    }
                    if (ip1[2] == 256)
                    {
                        ip1[2] = 1;
                        ip1[1]++;
                    }
                    if (ip1[1] == 256)
                    {
                        ip1[1] = 1;
                        ip1[0]++;
                    }
                    if (ip1[0] == 256)
                    {
                        break;
                    }
                }
                multiple.SetCurrent(500);
                for (int i = 0; i < 500; i++)
                {
                    new Thread(() =>
                    {
                        while (ipqueue.Count > 0)
                        {
                            Monitor.Enter(ipqueue);
                            if (ipqueue.Count > 0)
                            {
                                var ip = ipqueue.Dequeue();
                                Monitor.Exit(ipqueue);
                                Scanner scanner = new Scanner(ip, port);
                                scanner.Scan();
                            }
                            else
                            {
                                Monitor.Exit(ipqueue);
                            }
                        }
                        multiple.SetOne();
                    }).Start();
                }
                multiple.WaitAll();

                GrepIps(tnum);
                Console.WriteLine("GrepIps Finished");
                Attack(tnum);
                Console.WriteLine("Attack Finished");
                TryLogin(tnum);
                Console.WriteLine("TryLogin Finished");
                Implant(tnum);
                Console.WriteLine("Implant Finished");
                finish++;
                Console.WriteLine(finish / total * 100.0);
                Thread.Sleep(5000);
            }
            multiple.Dispose();

            Console.WriteLine("Finished");
            Console.ReadKey();
            Console.ReadKey();
        }