Beispiel #1
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            //读取本地文件路径,初步化日志类
            m_localPath = AppDomain.CurrentDomain.BaseDirectory;
            string tmpFolder = Path.Combine(m_localPath, "Temp");

            if (!Directory.Exists(tmpFolder))
            {
                Directory.CreateDirectory(tmpFolder);
            }

            H31Debug.LogFile = Path.Combine(tmpFolder, H31Debug.c_LogFile);
            resourceDir      = Path.Combine(m_localPath, RESOURCE_DIR);
            //连接数据库
            bool dbok = H31SQL.ConnectToDBServer();

            comboBox_Type.SelectedIndex    = 0;
            comboBox_OrderBy.SelectedIndex = 0;
            comboBox_Lanague.SelectedIndex = 1;
            //初始化显示查询表
            m_data.DataSource = null;
            m_data.Columns.Clear();
            m_data.RowHeadersVisible = false;
            m_data.BackgroundColor   = Color.White;
            m_data.Columns.Add("ID", "ID");
            m_data.Columns.Add("HashID", "HashID");
            m_data.Columns.Add("HashKey", "Hash");
            m_data.Columns.Add("recvTime", "时间");
            m_data.Columns.Add("keyContent", "keyContent");
            m_data.Columns.Add("keyType", "keyType");
            m_data.Columns.Add("recvTimes", "recvTimes");
            m_data.Columns.Add("fileCnt", "fileCnt");
            m_data.Columns.Add("filetotalSize", "filetotalSize");
            m_data.Columns.Add("TableID", "DetailID");
            m_data.Columns[0].Width   = 15;
            m_data.Columns[1].Width   = 20;
            m_data.Columns[2].Visible = false;
            m_data.Columns[3].Width   = 60;
            m_data.Columns[4].Width   = 300;
            m_data.Columns[5].Width   = 10;
            m_data.Columns[6].Width   = 30;
            m_data.Columns[7].Width   = 30;
            m_data.Columns[8].Width   = 40;
            m_data.Columns[9].Width   = 10;
        }
Beispiel #2
0
 /// <summary>
 /// 搜索数据库显示出来 2013-07-16
 /// </summary>
 private void ButtonSearch_Click(object sender, EventArgs e)
 {
     try
     {
         //TorrentFile my = new TorrentFile("1.torrent");
         m_data.Rows.Clear();
         int    selecttype = comboBox_Type.SelectedIndex + 1;
         int    ordertype  = comboBox_OrderBy.SelectedIndex + 1;
         string keyword    = textBox_Search.Text;
         if (keyword == "关键字")
         {
             keyword = "";
         }
         int     searchindex = Convert.ToInt32(textBox_SearchIndex.Text);
         int     ishanzi     = comboBox_Lanague.SelectedIndex;
         DataSet ds          = H31SQL.GetHashPageListFromDB(selecttype, ishanzi, keyword, ordertype, searchindex, MAX_PAGE_SHOW_COUN);
         Application.DoEvents();    //让系统在百忙之中来响应其他事件
         if (ds != null)
         {
             int cnt = ds.Tables[0].Rows.Count;
             for (int i = cnt - 1; i >= 0; i--)
             {
                 m_data.Rows.Add((cnt - i).ToString(), ds.Tables[0].Rows[i]["ID"].ToString(), ds.Tables[0].Rows[i]["hashKey"].ToString(), ds.Tables[0].Rows[i]["recvTime"].ToString(), ds.Tables[0].Rows[i]["keyContent"].ToString(),
                                 ds.Tables[0].Rows[i]["keyType"].ToString(), ds.Tables[0].Rows[i]["recvTimes"].ToString(), ds.Tables[0].Rows[i]["fileCnt"].ToString(), FormatFileSize(Convert.ToDouble(ds.Tables[0].Rows[i]["filetotalSize"].ToString())), ds.Tables[0].Rows[i]["Detail"].ToString());
             }
             if (MAX_PAGE_SHOW_COUN > cnt)
             {
                 Button_NEXTPAGE.Enabled = false;
             }
             else
             {
                 Button_NEXTPAGE.Enabled = true;
             }
         }
     }
     catch (System.Exception ex)
     {
         H31Debug.PrintLn(ex.StackTrace);
     }
 }
Beispiel #3
0
 //取得种子文件列表存储的地方
 private int GetDetailFileTableID()
 {
     if (m_nowTableCount > 1000000 || m_nowTableCount == 0)
     {
         m_nowTableID = 0;
         for (int k = 0; k < 10; k++)
         {
             int cnt1 = H31SQL.GetHashFileTableNumberCount(k + 1);
             if (cnt1 < 1000000)
             {
                 m_nowTableID    = k + 1;
                 m_nowTableCount = cnt1;
                 break;
             }
         }
         if (m_nowTableID == 0)
         {
             MessageBox.Show("10个种子文件表已经用完了,请手动创建!");
         }
     }
     return(1);
 }
Beispiel #4
0
        /// <summary>
        /// 选中一行,然后Tips显示文件列表内容
        /// </summary>
        private void m_data_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                DataGridView.HitTestInfo hi;
                hi = m_data.HitTest(e.X, e.Y);
                if (hi.RowIndex >= 0)
                {
                    this.toolTip1.Hide(this);
                    m_data.ClearSelection();
                    m_data.Rows[hi.RowIndex].Selected = true;
                    Point mousePos  = PointToClient(MousePosition);//获取鼠标当前的位置
                    int   hashid    = Convert.ToInt32(m_data.Rows[hi.RowIndex].Cells["HashID"].Value.ToString());
                    int   tableid   = Convert.ToInt32(m_data.Rows[hi.RowIndex].Cells["TableID"].Value.ToString());
                    int   ordertype = comboBox_OrderBy.SelectedIndex + 1;
                    int   ishanzi   = comboBox_Lanague.SelectedIndex;

                    DataSet ds = H31SQL.GetHashFileDetail(tableid, hashid, ordertype * 1000 + 10 + ishanzi);
                    Application.DoEvents();    //让系统在百忙之中来响应其他事件
                    string tip = "";
                    if (ds != null)
                    {
                        int cnt = ds.Tables[0].Rows.Count;
                        for (int i = 0; i < cnt; i++)
                        {
                            tip = tip + ds.Tables[0].Rows[i]["filename"].ToString() + "\t" + FormatFileSize(Convert.ToDouble(ds.Tables[0].Rows[i]["filesize"].ToString())) + "\r\n";
                        }
                    }
                    this.toolTip1.Show(tip, this, mousePos);//在指定位置显示提示工具
                }
                else
                {
                }
            }
            catch (System.Exception ex)
            {
                H31Debug.PrintLn(ex.StackTrace);
            }
        }
Beispiel #5
0
        /// <summary>
        /// 读取线程主函数 2013-06-16
        /// </summary>
        private void GetTheDataDelegate()
        {
            if (recvthreadison)
            {
                //检测网络状态
                if (!isConnected())
                {
                    LogTheAction(0, 1, "网络不通,请等待.");
                    recvthreadison = false;
                    return;
                }

                try
                {
                    MainStatusText.Text = string.Format("开始读取:{0}", DateTime.Now.ToString());
                    if (m_reader == null)
                    {
                        int res2 = GetOneFileDataToMDB();
                        if (m_reader != null)
                        {
                            m_reader.Close();
                            m_reader.Dispose();
                        }
                    }
                    if (string.IsNullOrEmpty(m_readFilename))
                    {
                        return;
                    }
                    //定位到上次文件读取的地方
                    m_reader = new StreamReader(Path.Combine(resourceDir, m_readFilename), Encoding.Default);
                    long     pos       = m_reader.BaseStream.Seek(m_readPos, SeekOrigin.Begin);
                    Int32    ticktime1 = System.Environment.TickCount;
                    string[] strlist   = new string[100];
                    string   str1      = m_reader.ReadLine();
                    int      i         = 0;
                    while (i < 100 && str1 != null)
                    {
                        if (str1.Length > 1)
                        {
                            if (str1.Length == 40)
                            {
                                m_readPos = m_readPos + str1.Length + 1;
                            }
                            else
                            {
                                m_readPos = m_readPos + str1.Length + 4;
                            }
                            strlist[i] = str1;
                            i++;
                        }
                        str1 = m_reader.ReadLine();
                    }
                    m_reader.Close();
                    m_doWorkCnt = m_doWorkCnt + i;
                    int value1 = Convert.ToInt32(m_readPos / 100);
                    MainProgressBar.Value = value1 > MainProgressBar.Maximum ? MainProgressBar.Maximum : value1;

                    Int32 ticktime2 = System.Environment.TickCount;
                    if (m_doWorkCnt % 10000 == 0)
                    {
                        SaveSetting();
                        LogTheAction(0, 1, "存储到BadList" + m_downBadList.Count.ToString() + "个成功.");
                    }
                    if (i == 0)
                    {
                        LogTheAction(0, 1, m_readFilename + "读取文件完成");
                        m_fileOKList[m_readFilename] = m_readPos;
                        int res2 = GetOneFileDataToMDB();
                        recvthreadison = false;
                        return;
                    }
                    //开始处理那么多条HASH
                    for (int k = 0; k < i && recvthreadison; k++)
                    {
                        HASHITEM item1 = new HASHITEM();
                        //通过正则表达式获取几种不同类型的HASH文件
                        int res11 = GetHashLineContent(strlist[k], ref item1);

                        if (res11 == 1)
                        {
                            if (m_downBadList.ContainsKey(item1.hashKey))
                            {
                                continue;
                            }

                            Int32 ticktime3     = System.Environment.TickCount;
                            int   detailTableid = 0;
                            int   keytype       = 0;
                            int   ishanzi       = 0;
                            bool  findexist     = false;

                            //先检查本地HASH列表里面是否有,没有就查询数据库里面是否有这一条,如果没有则需要插入,如果有,则需要直接更新次数和日志表
                            if (m_downOKList.ContainsKey(item1.hashKey))
                            {
                                if (m_downOKList[item1.hashKey] > 0)
                                {
                                    findexist     = true;
                                    keytype       = m_downOKList[item1.hashKey] / 1000;
                                    detailTableid = m_downOKList[item1.hashKey] / 10 % 100;
                                    ishanzi       = m_downOKList[item1.hashKey] % 10;
                                }
                            }
                            if (findexist == false)
                            {
                                int res2 = H31SQL.CheckHashItemExist(item1.hashKey, ref keytype, ref detailTableid, ref ishanzi);
                            }
                            if (detailTableid > 0)
                            {
                                H31SQL.UpdateHashCount(keytype, item1, detailTableid, ishanzi);
                                m_downOKList[item1.hashKey] = keytype * 1000 + detailTableid * 10 + ishanzi;
                                Int32 ticktime4 = System.Environment.TickCount;
                                //LogTheAction(2, 2, ">>>>" + item1.hashKey + "更新到数据库" + item1.keyType.ToString() + "成功" + keytype.ToString() + "TIME:" + (ticktime2 - ticktime1).ToString() + "-" + (ticktime4 - ticktime3).ToString());
                            }
                            else
                            {
                                Int32          ticktime4 = System.Environment.TickCount;
                                HASHFILEITEM[] filelist  = null;
                                //首先去下载种子文件并进行读取
                                int res = GetDownAndReaHashDetail(item1.hashKey, ref item1, ref filelist);
                                if (res == 0 || (res == 1 && item1.keyContent.Contains("�")))
                                {
                                    continue;
                                }
                                Int32 ticktime5 = System.Environment.TickCount;
                                if (filelist != null && res == 1 && filelist.Length <= MAX_FILEDETAIL_COUNT)
                                {
                                    item1.keyWords = "";
                                    ishanzi        = ISChineseAndEnglist(item1.keyContent);
                                    //插入新的一条HASH数据
                                    int   hashID    = H31SQL.AddNewHash((HASHTYPE)item1.keyType, item1, m_nowTableID, ishanzi);
                                    Int32 ticktime6 = System.Environment.TickCount;
                                    if (hashID > 0)
                                    {
                                        m_downOKList[item1.hashKey] = item1.keyType * 1000 + m_nowTableID * 10 + ishanzi;
                                        int real_add = 0;
                                        //插入文件列表
                                        for (int m = 0; m < filelist.Length; m++)
                                        {
                                            filelist[m].hashID   = hashID;
                                            filelist[m].recvTime = item1.recvTime;
                                            //过滤一些没有用的介绍性文件
                                            if (filelist[m].filesize == 0 || (filelist[m].filename).ToLower().Contains("Thumbs.db"))
                                            {
                                                continue;
                                            }
                                            int    dotpos = filelist[m].filename.LastIndexOf('.');
                                            string str2   = filelist[m].filename.Substring(dotpos + 1, filelist[m].filename.Length - dotpos - 1);
                                            if (str2.ToLower() == "url")
                                            {
                                                continue;
                                            }
                                            string str3 = filelist[m].filename.Substring(filelist[m].filename.Length - 1, 1);
                                            if (str3 == "_")
                                            {
                                                continue;
                                            }
                                            //如果是视频就直接不需要一些文件
                                            if ((item1.keyType == (int)HASHTYPE.MOVIE || filelist.Length > 30) && (str2.ToLower() == "mht" || str2.ToLower() == "html" || str2.ToLower() == "htm" || str2.ToLower() == "txt"))
                                            {
                                                continue;
                                            }

                                            //过滤文件名字中的网址
                                            filelist[m].filename = GetOneGoodString(filelist[m].filename);
                                            int resid = H31SQL.AddNewHashDetail(item1.keyType * 1000 + 10 + ishanzi, filelist[m], m_nowTableID);
                                            real_add = real_add + 1;
                                        }
                                        m_nowTableCount = m_nowTableCount + real_add;
                                        GetDetailFileTableID();
                                        Int32 ticktime7 = System.Environment.TickCount;
                                        LogTheAction(2, 1, ">>>>" + item1.keyContent + "插入数据库" + (item1.keyType * 1000 + 10 + ishanzi).ToString() + "成功" + filelist.Length.ToString() + "个文件 TIME:" +
                                                     (ticktime2 - ticktime1).ToString() + "-" + (ticktime4 - ticktime3).ToString() + "-" + (ticktime5 - ticktime4).ToString() + "-" + (ticktime6 - ticktime5).ToString() + "-" + (ticktime7 - ticktime6).ToString());
                                    }
                                }
                            }
                            Application.DoEvents();    //让系统在百忙之中来响应其他事件
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    H31Debug.PrintLn("GetTheDataDelegate:" + ex.StackTrace);
                }
            }
            else
            {
                Thread.Sleep(100);
                isFirstTimeCheck = true;
            }
            this.Text           = "已经读取" + m_readFilename + ":" + m_doWorkCnt.ToString() + "行";
            MainStatusText.Text = string.Format("读取完成:{0}", DateTime.Now.ToString());
            recvthreadison      = false;
        }