예제 #1
0
        /// <summary>
        /// 각 사이트에서 새로운 알림이 올 경우 이 함수가 실행됩니다.
        /// </summary>
        /// <param name="postItem"></param>
        private void Site_NewPost(PostItem postItem)
        {
            // Database Article 테이블에 새로운 post의 tuple을 삽입해줌
            MysqlNode node = new MysqlNode(GachonOption.MysqlOption,
                                           "INSERT INTO article (course_no, board_name, no, category, publisher, title, date, content, url, sitetype, siteid)" +
                                           "VALUES (?course_no, ?board_name, ?no, ?posttype, ?publisher, ?title, ?date, ?content, ?url, ?sitetype, ?siteid) ");

            //일반 게시글의 경우엔 강의번호, 게시판이름, 게시글번호 등의 attribute가 있음
            node["course_no"]  = this.Key;
            node["board_name"] = postItem.board_name;
            node["no"]         = postItem.no;
            node["posttype"]   = (int)postItem.posttype;
            node["publisher"]  = postItem.Publisher;
            node["title"]      = postItem.Title;
            node["date"]       = postItem.time;
            node["content"]    = postItem.Content;
            node["url"]        = postItem.url;
            node["sitetype"]   = postItem.source.Type;
            node["siteid"]     = postItem.source.ID;
            node.ExecuteNonQuery();

            // 게시판의 유형이 레포트 제출실일 경우 형식이 다름
            if (postItem.posttype == BoardType.PostType.Homework)
            {
                // 과제에 관한 게시글은 따로 Homework Table에 저장한다.
                MysqlNode hwnode = new MysqlNode(GachonOption.MysqlOption,
                                                 "INSERT INTO homework (course_no, article_no, start_date, end_date)" +
                                                 "VALUES (?course_no, ?article_no, ?start_date, ?end_date) ");

                // 레포트 게시글이기 때문에 마감기한도 추가
                hwnode["course_no"]  = this.Key;
                hwnode["article_no"] = postItem.no;
                hwnode["start_date"] = postItem.s_time;
                hwnode["end_date"]   = postItem.e_time;
                hwnode.ExecuteNonQuery();
            }

            // 이 객체의 이벤트를 듣고있는 리스너에게 이벤트 메세지 전달.
            NewPost?.Invoke(this, postItem);
        }
예제 #2
0
        /// <summary>
        /// 각 사이트에서 새로운 알림이 올 경우 이 함수가 실행됩니다.
        /// </summary>
        /// <param name="postItem"></param>
        private void Site_NewPost(PostItem postItem)
        {
            //여기에 SQL추가하기~ Insert

            MysqlNode node = new MysqlNode(GachonOption.MysqlOption,
                                           "INSERT INTO article (course_no, board_name, no, category, publisher, title, date, content, url, sitetype, siteid)" +
                                           "VALUES (?course_no, ?board_name, ?no, ?posttype, ?publisher, ?title, ?date, ?content, ?url, ?sitetype, ?siteid) ");

            node["course_no"]  = this.Key;
            node["board_name"] = postItem.board_name;
            node["no"]         = postItem.no;
            node["posttype"]   = (int)postItem.posttype;
            node["publisher"]  = postItem.Publisher;
            node["title"]      = postItem.Title;
            node["date"]       = postItem.time;
            node["content"]    = postItem.Content;
            node["url"]        = postItem.url;
            node["sitetype"]   = postItem.source.Type;
            node["siteid"]     = postItem.source.ID;
            node.ExecuteNonQuery();

            if (postItem.posttype == BoardType.PostType.Homework)
            {
                MysqlNode hwnode = new MysqlNode(GachonOption.MysqlOption,
                                                 "INSERT INTO homework (course_no, article_no, start_date, end_date)" +
                                                 "VALUES (?course_no, ?article_no, ?start_date, ?end_date) ");

                hwnode["course_no"]  = this.Key;
                hwnode["article_no"] = postItem.no;
                hwnode["start_date"] = postItem.s_time;
                hwnode["end_date"]   = postItem.e_time;
                hwnode.ExecuteNonQuery();
            }

            // 이 객체의 이벤트를 듣고있는 리스너에게 이벤트 메세지 전달.
            NewPost?.Invoke(this, postItem);
        }
예제 #3
0
 public abstract void GetPage(GachonUser guserm, PostItem item);
예제 #4
0
 protected void NewPostEvent(PostItem item)
 {
     NewPost.Invoke(item);
 }
예제 #5
0
        /// <summary>
        /// 메뉴 안 게시글 목록을 읽어오는 함수입니다.
        /// </summary>
        /// <param name="guser"></param>
        /// <param name="board">메뉴</param>
        /// <returns></returns>
        public override List <PostItem> GetList(GachonUser guser, BoardType board)
        {
            //Timer timer = new Timer(Type+ID + "["+ board.url+"]", 5);
            List <PostItem>    result = new List <PostItem>();
            HtmlDocument       dom    = guser.VisitPage(board.url);
            HtmlNodeCollection sets   = dom.DocumentNode.SelectNodes("//div[@class='boardlist']/table/tbody/tr");

            //timer.Print();


            if (sets != null)
            {
                foreach (HtmlNode node in sets)
                {
                    //등록된 게시글이 존재하면
                    if (node.InnerText.IndexOf("등록된 글이") < 0)
                    {
                        //게시글의 주소를 얻음
                        HtmlNodeCollection datas = node.SelectNodes(".//td");
                        string             url   = datas[1].SelectSingleNode(".//a").Attributes["href"].Value;
                        url = ParseSupport.StringFromHtml(url);

                        string no = null;
                        //javascript:go page()의 파라미터를 통해 주소를 얻음
                        if (url.IndexOf("java") == 0)
                        {
                            Regex reg = new Regex(@"javascript:goPage\([0-9]+,([0-9]+)\)");
                            no  = reg.Match(url).Groups[1].Value;
                            url = board.url.Replace("list.jsp", "view.jsp") + "&article_no=" + no;
                        }
                        //그 외에는 절대경로를 얻어냄
                        else
                        {
                            Uri uri = new Uri(new Uri(board.url), url);
                            url = uri.AbsoluteUri;
                            no  = ParseSupport.UrlQueryParser(url)["article_no"].ToString();
                        }
                        PostItem item;

                        #region 레포트 제출실 메뉴일 경우
                        if (board.type == BoardType.PostType.Homework)
                        {
                            //각 list의 정보를 포함한 PostItem 객체를 생성한다
                            //레포트 제출실의 경우 제출 인원, 마감날짜의 정보가 일반 게시글과 다르기 때문에 분류하였음
                            item = new PostItem(BoardType.PostType.Homework, board.name)
                            {
                                source        = this,
                                url           = url,
                                no            = Int32.Parse(no),
                                Title         = ParseSupport.StringFromHtml(datas[1].InnerText),
                                time          = DateTime.Now,
                                s_time        = DateTime.Parse(datas[2].InnerText.Substring(0, 10)),
                                e_time        = DateTime.Parse(datas[2].InnerText.Substring(13, 10)),
                                num_submitted = Int32.Parse(datas[5].InnerText.Split('/')[0]),
                                Publisher     = "관리자"
                            };
                        }
                        #endregion
                        #region 그 외의 메뉴 (공지사항, 강의자료실 등)
                        else
                        {
                            item = new PostItem(board.type, board.name)
                            {
                                source    = this,
                                url       = url,
                                no        = Int32.Parse(no),
                                Title     = ParseSupport.StringFromHtml(datas[1].InnerText),
                                Publisher = datas[2].InnerText,
                                time      = DateTime.Parse(datas[3].InnerText)
                            };
                        }
                        result.Insert(0, item);
                        #endregion
                    }
                }
            }
            return(result);
        }
예제 #6
0
 public override void GetPage(GachonUser guserm, PostItem item)
 {
 }