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