Example #1
0
        //맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 읽어올 때는 SQL 테이블에 추가되지 않도록 false
        public static void Initialize()
        {
            MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "SELECT * FROM course");

            using (node.ExecuteReader())
            {
                while (node.Read())
                {
                    bool        isClassType = node.GetString("type") == "Class";
                    GachonClass newclass    = GachonClass.GetObject(node.GetString("name"), node.GetString("no"), isClassType, false); //title , key
                    if (!string.IsNullOrEmpty(node.GetString("eclass")))
                    {
                        newclass.CombineSite(new GachonEClass(node.GetString("eclass")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("gcafe")))
                    {
                        newclass.CombineSite(new GachonCafe(node.GetString("gcafe")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("cyber")))
                    {
                        newclass.CombineSite(new GachonCyberCampus(node.GetString("cyber")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("navercafe")))
                    {
                        newclass.CombineSite(new NaverCafe(node.GetString("navercafe")), false);
                    }
                }
            }
        }
Example #2
0
        //맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 이때 읽어올 때는 SQL 테이블에 추가되지 않도록 false
        public static void Initialize()
        {
            //모든 강의 정보를 데이터베이스 Course 테이블에서 읽어옴
            MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "SELECT * FROM course");

            using (node.ExecuteReader())
            {
                while (node.Read())
                {
                    // Format이 맞는지 확인하기 위해 Class type인지 확인
                    bool        isClassType = node.GetString("type") == "Class";
                    GachonClass newclass    = GachonClass.GetObject(node.GetString("name"), node.GetString("no"), isClassType, false); //title , key

                    //해당 강의에 대한 site정보가 있으면 해당 강의에 연결
                    if (!string.IsNullOrEmpty(node.GetString("eclass")))
                    {
                        newclass.CombineSite(new GachonEClass(node.GetString("eclass")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("gcafe")))
                    {
                        newclass.CombineSite(new GachonCafe(node.GetString("gcafe")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("cyber")))
                    {
                        newclass.CombineSite(new GachonCyberCampus(node.GetString("cyber")), false);
                    }
                    if (!string.IsNullOrEmpty(node.GetString("navercafe")))
                    {
                        newclass.CombineSite(new NaverCafe(node.GetString("navercafe")), false);
                    }
                }
            }
        }
 public static GachonClass GetObject(string Title, string key, bool Formal = false, bool want_insert_sql = true)
 {
     if (GachonObjects.AllClass.ContainsKey(key))
     {
         return(GachonObjects.AllClass[key]);
     }
     else
     {
         if (want_insert_sql)
         {
             MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "INSERT into course (no, type, name) values (?key, 'Class', ?tit)");
             node["key"] = key;
             node["tit"] = Title;
             node.ExecuteNonQuery();
         }
         GachonClass gachonClass = new GachonClass(Title, key, Formal);
         GachonObjects.AllClass.Add(key, gachonClass);
         return(gachonClass);
     }
 }
Example #4
0
 /// <summary>
 /// 해당 강의에 대한 객체를 반환해 줍니다.
 /// </summary>
 /// <param name="Title"></param>
 /// <param name="key"></param>
 /// <param name="Formal"></param>
 /// <param name="want_insert_sql">데이터베이스에 새로운 강의를 등록해야 할 경우</param>
 /// <returns></returns>
 public static GachonClass GetObject(string Title, string key, bool Formal = false, bool want_insert_sql = true)
 {
     // 이미 존재하는 강의일 경우에는 바로 그 강의객체를 찾아 리턴해줌
     if (GachonObjects.AllClass.ContainsKey(key))
     {
         return(GachonObjects.AllClass[key]);
     }
     else
     {
         //새로운 강의일 때 & Database에 Insert하기를 원하는 경우
         if (want_insert_sql)
         {
             //Databse의 Course Table에 Insert
             MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "INSERT into course (no, type, name) values (?key, 'Class', ?tit)");
             node["key"] = key;
             node["tit"] = Title;
             node.ExecuteNonQuery();
         }
         //존재하지 않는 강의이기 때문에 강의 이름, 고유번호를 가진 새로운 객체 생성 후 AllClass 리스트에 추가
         GachonClass gachonClass = new GachonClass(Title, key, Formal);
         GachonObjects.AllClass.Add(key, gachonClass);
         return(gachonClass);
     }
 }
 public void CombineClass(GachonClass gachonClass)
 {
     gachonClass.CombineTakeUser(this);
 }
        /// <summary>
        /// 로그인 세션을 강제로 실행시킵니다.
        /// 주의: 각 함수에서 로그인 세션을 유지되는지 확인후 자동으로 실행하기때문에 따로 이 함수를 실행하지 않아도 됨.
        /// </summary>
        public void Login()
        {
            // 가천대 로그인페이지 접근 시도/ (sson.kyungwon.ac.kr)에서 세션값을 가져오는 과정(GID 오류때문에 반드시 필요)
            VisitPage("https://www.gachon.ac.kr/site/login.jsp");
            string a = WebPacket.Web_POST(cookie,
                                          "https://sson.kyungwon.ac.kr/sso/pmi-sso-login-uid-password2.jsp",
                                          "https://www.gachon.ac.kr/site/login_sso.jsp",
                                          "return_url=&uid=" + ID + "&password="******"&x=41&y=20");

            // 가천대 서버에 접속하지 못한경우 로그인 실패
            if (a == null)
            {
                return;
            }
            if (a.IndexOf("location.href='https://www.gachon.ac.kr:443/site/login.jsp'") >= 0)
            {
                // 사이버 캠퍼스에 로그인을 하면서 강의 정보 불러옴.
                HtmlDocument data = WebPacket.Web_POST_Html(cookie, "https://cyber.gachon.ac.kr/login/index.php", "https://cyber.gachon.ac.kr/login.php", "username="******"&password="******"SELECT id FROM account WHERE id = ?id");
                search_id["id"] = ID;
                bool First_Login = false;
                using (search_id.ExecuteReader())
                {
                    if (!search_id.Read())
                    {
                        MysqlNode idnode = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO account (id) VALUES (?id) ");
                        idnode["id"] = ID;
                        idnode.ExecuteNonQuery();
                        First_Login = true;
                    }
                }
                if (First_Login) // 첫 접속시 수강중인 강의를 새로 등록
                {
                    List <GachonClass> need_eclass_info = new List <GachonClass>();
                    foreach (HtmlNode node in data.DocumentNode.SelectNodes("//div[@class='course_box']"))
                    {
                        JObject box   = ParseSupport.CyberCampusTitle(node.SelectSingleNode(".//div[@class='course-title']/h3").InnerText);
                        string  title = (string)box["title"];
                        string  key   = (string)box["key"];
                        lock (GachonObjects.AllClass)
                        {
                            if (!GachonObjects.AllClass.ContainsKey(key))
                            {
                                GachonClass newclass = GachonClass.GetObject(title, key, true);
                                JObject     urlq     = ParseSupport.UrlQueryParser(node.SelectSingleNode(".//a[@class='course_link']").Attributes["href"].Value);
                                newclass.CombineSite(new GachonCyberCampus(urlq["id"].ToString()));
                                need_eclass_info.Add(newclass);
                            }
                            MysqlNode insertNode = new MysqlNode(GachonOption.MysqlOption,
                                                                 "INSERT into takes_course(student_id, course_no) values (?id, ?course_no)");
                            insertNode["id"]        = ID;
                            insertNode["course_no"] = key;
                            insertNode.ExecuteNonQuery();

                            CombineClass(GachonObjects.AllClass[key]);
                        }
                    }
                    HtmlDocument eclassinfo = null;
                    if (need_eclass_info.Count > 0)
                    {
                        eclassinfo = WebPacket.Web_GET_Html(Encoding.UTF8, cookie, "http://eclass.gachon.ac.kr/index.jsp");
                    }
                    // 새로운 클래스가 생겼으니 eclass 정보를 읽어서 새로 생긴 클래스와 연결한다.
                    foreach (GachonClass newclass in need_eclass_info)
                    {
                        HtmlNode node = eclassinfo.DocumentNode.SelectSingleNode("//a[@title=" + newclass.ID + newclass.Sec_ID + "]");
                        if (node != null)
                        {
                            string e_id = ParseSupport.UrlQueryParser(node.Attributes["href"].Value)["Forum_seq"].ToString();
                            newclass.CombineSite(new GachonEClass(e_id));
                        }
                    }
                }
                else // 첫 접속이 아니면 기존 강의목록을 연결한다.
                {
                    MysqlNode search_course = new MysqlNode(GachonOption.MysqlOption, "SELECT course_no FROM takes_course WHERE student_id = ?id");
                    search_course["id"] = ID;
                    using (search_course.ExecuteReader())
                    {
                        while (search_course.Read())
                        {
                            CombineClass(GachonObjects.AllClass[search_course.GetString("course_no")]);
                        }
                    }
                }
                // 카페 도메인에도 세션을 만들어줌. 없을경우 처음 카페 접속시 리다이렉션 걸림.
                VisitPage("http://cafe.gachon.ac.kr");
                LoginOk = true;
            }
            else
            {
                LoginOk = false;
            }
        }