//맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 읽어올 때는 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); } } } }
//맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 이때 읽어올 때는 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); } }
/// <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; } }