예제 #1
1
 private void  button1_Click(object sender, EventArgs e)
 {
     
     bool check;
     Control.Control control= new Control.Control();
     Entity.Entity entity = new Entity.Entity();
     entity.setUsername(this.textBox1.Text);
     entity.setPassword(this.textBox2.Text);
     check = control.checkUsers(entity.getUsername(), entity.getPassword());
     dt = control.getCustomer(entity.getUsername());
     if (check)
     {
         check1 = true;
         mainForm main = new mainForm();
         main.ShowDialog();
         this.textBox1.Text = "";
         this.textBox2.Text = "";
     }
     else {
         this.textBox1.Text = "";
         this.textBox2.Text = "";
         MessageBox.Show("密码错误或用户名不存在");
     }
     
 }
예제 #2
0
 public static void AddTov(string name, int code, DateTime dateTime, int term, string path, ref List <Entity.Entity> ent)
 {
     Entity.Entity tov = new Entity.Entity(name, code, dateTime, term);
     ent.Add(tov);
     EntityDB.MyFileEditor fw = new EntityDB.MyFileEditor();
     fw.BinaryWrite(path, ent);
     Console.WriteLine("Tovar added");
 }
예제 #3
0
        public void UpdateEntityPosition(Entity.Entity entity, Position position)
        {
            var entityPositionChangeEvent = new EntityPositionChangeEvent {
                Id = entity.Id, Position = position
            };
            var serverEvent = new ServerEvent {
                PositionChange = entityPositionChangeEvent
            };
            var bytes = serverEvent.ToByteArray();

            AltNetworking.Module.ClientPool.SendToAll(bytes);
        }
예제 #4
0
        public void UpdateEntityRange(Entity.Entity entity, float range)
        {
            var entityRangeChangeEvent = new EntityRangeChangeEvent {
                Id = entity.Id, Range = range
            };
            var serverEvent = new ServerEvent {
                RangeChange = entityRangeChangeEvent
            };
            var bytes = serverEvent.ToByteArray();

            AltNetworking.Module.ClientPool.SendToAll(bytes);
        }
예제 #5
0
 public ObjectEntity(IEntityStreamer entityStreamer, Entity.Entity streamedEntity) : base(entityStreamer,
                                                                                          streamedEntity)
 {
 }
예제 #6
0
        /// <summary>
        /// 采集数据
        /// </summary>
        /// <param name="_configlist"></param>
        /// <returns></returns>
        //public IList<Entity.Entity> CollectingData(IList<URLConfig> _configlist)
        public IList<Entity.Entity> CollectingData()
        {
            string str_content = string.Empty;
            string str_path = string.Empty;
            int startindex = 0;
            int endindex = 0;
            int step = 1;
            int total = 0;//总共需要循环的次数
            int indexurl = 1;
            string str_url = string.Empty;
            string str_listnextpageurl = string.Empty;//列表下一页的连接地址
            bool haslistnextpage = true;

            if (!File.Exists(HttpContext.Current.Server.MapPath("Log.txt")))
            {
                File.Create(HttpContext.Current.Server.MapPath("Log.txt"));
            }

            string __path = HttpContext.Current.Server.MapPath("Log.txt");

            //记录成功日志
            File.AppendAllText(__path, "\r\n---------------------------【蜘蛛】开始运行 Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "------------------------------------------\r\n");

            #region 循环抓取
            foreach (URLConfig urlconfig in _configlist)
            {
                try
                {
                    startindex = Convert.ToInt32(urlconfig.StartPageNo);
                    endindex = Convert.ToInt32(urlconfig.EndPageNo);
                    step = Convert.ToInt32(urlconfig.ListStep);

                    total = _configlist.Count;

                    // 设置代理,如果为“127.0.0.1”,则不使用
                    if (!string.IsNullOrEmpty(urlconfig.Proxy) && !string.IsNullOrEmpty(urlconfig.Port))
                    {
                        hc.ProxyAddress = urlconfig.Proxy;
                        hc.Port = Convert.ToInt32(urlconfig.Port);
                    }

                    #region 列表页抓取
                    while (startindex <= endindex)
                    {
                        //如果是不规则的列表页,那么只能一页一页的获取数据
                        if (urlconfig.ListFormat.IndexOf("{0}") != -1)
                        {
                            str_url = urlconfig.SiteUrl + string.Format(urlconfig.ListFormat, startindex);
                        }
                        else
                        {
                            str_url = urlconfig.SiteUrl + urlconfig.ListFormat;
                        }

                        while (haslistnextpage)
                        {
                            #region haslistnextpage
                            hc.GetSrc(str_url, urlconfig.Charset, out str_content);

                            // 获取列表下一页的连接地址
                            if (!string.IsNullOrEmpty(urlconfig.ListNextPage))
                            {
                                str_listnextpageurl = ParserHtml(str_content, urlconfig.ListNextPage, urlconfig.ListNextPageReplace);

                                if (!string.IsNullOrEmpty(str_listnextpageurl))
                                {
                                    str_url = urlconfig.SiteUrl + str_listnextpageurl;
                                    haslistnextpage = true;
                                }
                                else
                                {
                                    haslistnextpage = false;
                                }
                            }
                            else
                            {
                                haslistnextpage = false;
                            }

                            //获取list内容
                            if (!string.IsNullOrEmpty(urlconfig.ListContent))
                            {
                                str_content = ParserHtml(str_content, urlconfig.ListContent, urlconfig.ListContentReplace);
                            }

                            //获取list页的详细页连接数组
                            string[] str_arr = RegExpHelper.GetMatchDictionary(str_content, urlconfig.DetailLink);

                            if (str_arr == null)
                            {
                                File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Error:分析list页的详细连接数组出错!---列表地址:" + str_url + "------\r\n");
                                return _lkelist;
                            }

                            #region 循环获取详细页的内容
                            //循环获取详细页的内容
                            int urlindex = 1;
                            foreach (string url in str_arr)
                            {
                                string cur_url =RegExpHelper.GetMatchDictionary(url, @">([\w|\w\s|\w\W]+/archive/\d{4}/\d{2}/\d{2}/.*?.html)<")[0].Replace("<","").Replace(">","").Trim();

                                //if (!cur_url.Trim().StartsWith("/"))
                                //{
                                //    cur_url = "/" + cur_url;
                                //}

                                hc.GetSrc(urlconfig.SiteUrl + cur_url, urlconfig.Charset, out str_content);

                                Entity.Entity lke = new Entity.Entity();
                                lke.Source = urlconfig.Site;
                                lke.Channel = urlconfig.Channel;
                                lke.Url = urlconfig.SiteUrl + cur_url; //urlconfig.SiteUrl;
                                lke.Snaptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                                //获取详细页的标题
                                if (!string.IsNullOrEmpty(urlconfig.TitleDetail))
                                    lke.Title = ParserHtml(str_content, urlconfig.TitleDetail, urlconfig.TitleDetailReplace);

                                //获取详细页的作者
                                if (!string.IsNullOrEmpty(urlconfig.AuthorDetail))
                                    lke.Author = ParserHtml(str_content, urlconfig.AuthorDetail, urlconfig.AuthorDetailReplace);

                                //获取详细页的时间
                                if (!string.IsNullOrEmpty(urlconfig.DateDetail))
                                    lke.Inputdate = ParserHtml(str_content, urlconfig.DateDetail, urlconfig.DateDetailReplace);

                                //获取详细页的Tag
                                if (!string.IsNullOrEmpty(urlconfig.TagDetail))
                                {
                                    lke.Tags = string.Empty;
                                    string[] str_arrtag = RegExpHelper.GetMatchDictionary(str_content, urlconfig.TagDetail);
                                    if (str_arrtag != null)
                                    {
                                        lke.Tags = StringUtil.NoHTML(StringUtil.JoinArray<string>(str_arrtag, "|", ""));
                                    }
                                }

                                //获取详细页的内容
                                if (!string.IsNullOrEmpty(urlconfig.ContentDetail))
                                {
                                    lke.Content = RegExpHelper.GetMatchDictionary(str_content, urlconfig.ContentDetail)[0];
                                    //if (urlconfig.Site.Contains("博客园"))
                                    //{
                                    //    string posttitle = RegExpHelper.GetMatchDictionary(lke.Content, "(<a id=[\\w\\W]+ class=\"postTitle2\" href=(?<url>.+?)>(?<content>.+?)</a>)>")[0];
                                    //    lke.Content = lke.Content.Remove(lke.Content.IndexOf(posttitle), posttitle.Length);
                                    //    //if (str_content.Contains("EntryTag"))
                                    //    //    lke.Content = ParserHtml(str_content, "<div class = \"postTitle\">|<div class=\"postTitle\">([\\w\\W]+)<div id=\"EntryTag\">|<div id = \"EntryTag\">", "");
                                    //    //else
                                    //    //    lke.Content = ParserHtml(str_content, " <div class = \"postDesc\">|<div class=\"postDesc\">([\\w\\W]+阅读([\\d]+))阅读([\\d]+)", "");

                                    //    //lke.Content = ParserHtml(str_content, urlconfig.ContentDetail, urlconfig.ContentDetailReplace).Trim();
                                    //}
                                    //else
                                    //{
                                    //    lke.Content = ParserHtml(str_content, urlconfig.ContentDetail, urlconfig.ContentDetailReplace).Trim();
                                    //}

                                }
                                //获取详细页的分页列表
                                if (!string.IsNullOrEmpty(urlconfig.ContentList))
                                {
                                    //string[] str_arrcontent = RegExpHelper.GetMatchDictionary(str_content, urlconfig.ContentList);
                                    IList<string> _urllist = RegExpHelper.GetMatchDic(str_content, urlconfig.ContentList);
                                    int __index = 1;

                                    if (_urllist.Count > 0)
                                    {
                                        try
                                        {

                                            //记录成功日志
                                            File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "///////////////////--进入详细页面列表页--///////////////////////\r\n");

                                            #region 循环获取详细页的分页列表的内容
                                            foreach (string _listurl in _urllist)
                                            {
                                                hc.GetSrc(urlconfig.SiteUrl + _listurl, urlconfig.Charset, out str_content);

                                                sb.Append("<!-- Next Page Start -->");
                                                sb.Append(ParserHtml(str_content, urlconfig.ContentDetail, urlconfig.ContentDetailReplace));
                                                sb.Append("<!-- Next Page End -->");

                                                //记录成功日志
                                                File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "-----Successful Url:" + url + "---成功列表地址:" + _listurl + "\r\n");

                                                __index++;
                                                Thread.Sleep(int.Parse(urlconfig.SnatchInterval));
                                            }
                                            #endregion

                                            // 将下面的所有列表页内容合并
                                            if (!string.IsNullOrEmpty(sb.ToString()))
                                                lke.Content += sb.ToString();
                                            File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "///////////////////--退出详细页面列表页--///////////////////////\r\n");
                                        }
                                        catch (Exception ex)
                                        {
                                            File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Error:抓取详细页列表的详细连接数组出错!---------------------------\r\n");
                                            File.AppendAllText(__path, @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Error:" + ex.StackTrace + "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\n");
                                        }
                                    }
                                }

                                _lkelist.Add(lke);

                                //记录成功日志
                                File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "-----Successful Url:" + cur_url + "---成功列表地址:" + str_url + "\r\n");

                                Thread.Sleep(int.Parse(urlconfig.SnatchInterval));
                                urlindex++;
                                _totalnumber++;//记录采集的条数

                            }
                            #endregion

                            #region 序列化xml 提供采集样本内容
                            if (indexurl == 1)
                            {
                                string cur_date = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString();

                                if (!Directory.Exists(HttpContext.Current.Server.MapPath(cur_date)))
                                {
                                    Directory.CreateDirectory(HttpContext.Current.Server.MapPath(cur_date));
                                }

                                str_path = HttpContext.Current.Server.MapPath(cur_date + "/"+ cur_date +"XmlData.xml");

                                XmlSerializer xs = new XmlSerializer(_lkelist.GetType());

                                //Stream stream = new FileStream(str_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                                //_lkelist = (Entity.Entity)xs.Deserialize(stream);
                                //_lkelist.Add(entity);

                                try
                                {

                                    StreamWriter sw = new StreamWriter(str_path);
                                    xs.Serialize(sw, _lkelist);
                                    sw.Close();
                                    //记录成功日志
                                    File.AppendAllText(__path, "\r\n---------------------------【蜘蛛】 序列化成功,Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "--------------\r\n");
                                    File.AppendAllText(__path, "//////////////////////查看xml文件地址:" + str_path + "///////////////////\r\n");
                                }
                                catch (Exception ex)
                                {
                                    //记录成功日志
                                    File.AppendAllText(__path, "\r\n---------------------------【蜘蛛】 序列化失败,Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "---------------------------------------\r\n");
                                    throw new Exception(ex.Message);
                                }
                            }
                            #endregion
                            //_lkelist.Clear();//清楚所有的项

                            //记录目前成功采集数据
                            File.AppendAllText(__path, "\r\n////////////////////////////////--------【蜘蛛】 目前成功采集了[" + _totalnumber + "]条数据--------///////////////////////////////////////\r\n");

                            #endregion
                        }

                        startindex += step;

                    }
                    indexurl++;

                }
                catch(Exception ex)
                {
                    File.AppendAllText(__path, "Execute time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Error:" + ex.Message + "----Error Url" + str_url + "\r\n");
                    File.AppendAllText(__path, "========================================Error Info==================================\r\n");
                    File.AppendAllText(__path, "Error Info " + ex.StackTrace + "\r\n");
                    File.AppendAllText(__path, "========================================Error Info==================================\r\n");
                }
                    #endregion
            }

            //记录成功日志
            File.AppendAllText(__path, "\r\n////////////////////////////////--------【蜘蛛】 最终成功采集了[" + _totalnumber + "]条数据--------///////////////////////////////////////\r\n");
            File.AppendAllText(__path, "\r\n---------------------------【蜘蛛】 停止运行 Stop time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "------------------------------------------\r\n");

            return _lkelist;
            #endregion
        }