public bool AddFileItem(int no) { // 해당 번호의 파일이 실제로 있는지 확인 + 파일 정보 불러오기 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT file.name, file.size, account.name as owner, date FROM file join account on file.owner=account.id where file_no=?no"); node["no"] = no; JObject item = null; using (node.ExecuteReader()) { if (node.Read()) { item = new JObject(); item["type"] = NetworkProtocol.Inventory_Add; item["no"] = no; item["size"] = node.GetInt("size"); item["name"] = node.GetString("name"); item["date"] = node.GetDateTime("date"); item["owner"] = node.GetString("owner"); } else { return(false); } } node = new MysqlNode(private_data.mysqlOption, "INSERT INTO inventory(student_id, file_no) VALUES (?id, ?no)"); node["id"] = ID; node["no"] = no; if (node.ExecuteInsertQuery() < 0) { return(false); } socket.Send(item); return(true); }
public static void GetPostList(ESocket socket, int no) { string id = GachonSocket.GetId(socket); if (id != null) { MysqlNode mysqlNode = new MysqlNode(private_data.mysqlOption, "SELECT * FROM post_name where receiver=?id and no > ?no order by date"); mysqlNode["no"] = no; mysqlNode["id"] = id; JArray array = new JArray(); using (mysqlNode.ExecuteReader()) { while (mysqlNode.Read()) { JObject item = new JObject(); item["title"] = mysqlNode.GetString("title"); item["content"] = mysqlNode.GetString("content"); item["no"] = mysqlNode.GetInt("no"); item["sender"] = mysqlNode.GetString("sender_name"); item["sender_id"] = mysqlNode.GetString("sender"); item["date"] = (mysqlNode.GetDateTime("date")).ToString("yyyy-MM-dd HH:mm:ss"); array.Add(item); } } JObject json = new JObject(); json["type"] = AndroidProtocol.PostList; json["items"] = array; socket.Send(json); return; } }
public static void GetItem(User user, int no) { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM post_name where receiver=?receiver and no=?no"); node["no"] = no; node["receiver"] = user.ID; using (node.ExecuteReader()) { if (node.Read() == false) { user.ToChatMessage("존재하지 않거나 권한이 없는 우편입니다.", ChatType.System); return; } if (node.GetInt("read") == 0) { // 읽음 표시 MysqlNode update = new MysqlNode(private_data.mysqlOption, "UPDATE post SET `read`=1 where no=?no"); update["no"] = no; update.ExecuteNonQuery(); } JObject json = new JObject(); json["type"] = NetworkProtocol.Post_Detail; json["title"] = node.GetString("title"); json["content"] = node.GetString("content"); json["no"] = no; json["sender"] = node.GetString("sender_name"); json["sender_id"] = node.GetString("sender"); json["content"] = string.Format("[000000]{0}[-]", json["content"]); // BBCode를 이용해 글씨가 검정색임을 나타낸다. if (node.GetString("file") != null) // 스트링으로 null 체크 { MysqlNode filenode = new MysqlNode(private_data.mysqlOption, "SELECT name FROM file WHERE file_no=?no"); filenode["no"] = node.GetInt("file"); using (filenode.ExecuteReader()) { if (filenode.Read()) { json["content"] = string.Format("[000000]첨부 파일[-]\r\n[url={0}][u][B284FF]{1}[-][/u][/url]\r\n\r\n{2}", "file-" + filenode["no"], filenode.GetString("name"), json["content"]); } } } DateTime date = node.GetDateTime("date"); if (date.DayOfYear == DateTime.Now.DayOfYear) { json["date"] = date.ToString("HH:mm:ss"); } else { json["date"] = date.ToString("yyyy-MM-dd"); } user.socket.Send(json); } }
/// <summary> /// 플레이어가 로딩이 끝났을때 다른 플레이어에게 플레이어 입장 소식을 알리고, 이 플레이어에게 정보를 전달합니다. /// </summary> public override void Start() { base.Start(); // 해당 유저에게도 월드에 있는 다른 오브젝트 표시 foreach (GameObject item in GameObject.Items.Values) { if (item != this) { JObject json = item.InfoData(); json["type"] = NetworkProtocol.NewObject; socket.Send(json); } } // 인벤토리 로드 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM inventory_items WHERE student_id=?id"); node["id"] = ID; using (node.ExecuteReader()) { while (node.Read()) { JObject item = new JObject(); item["type"] = NetworkProtocol.Inventory_Add; item["no"] = node.GetInt("file_no"); item["size"] = node.GetInt("size"); item["name"] = node.GetString("name"); item["date"] = node.GetDateTime("date"); item["owner"] = node.GetString("owner"); socket.Send(item); } } // 과제 정보 로드 node = new MysqlNode(private_data.mysqlOption, "SELECT takes_course.course_no, title, end_date FROM takes_course JOIN homework_list ON takes_course.course_no=homework_list.course_no WHERE student_id=?id and DATE(NOW()) <= DATE(end_date)"); node["id"] = ID; using (node.ExecuteReader()) { while (node.Read()) { NetworkMessageList.AddHomework(socket, GachonObjects.AllClass[node.GetString("course_no")].Title, node.GetString("title"), node.GetDateTime("end_date")); } } NetworkMessageList.TipMessage(socket, "가천 빌리지에 오신것을 환영합니다!"); ToChatMessage("가천 빌리지에 오신것을 환영합니다!", ChatType.Notice); int NewMessage = PostSystem.GetNewMessageCount(ID); if (NewMessage > 0) { ToChatMessage("[우편함] " + NewMessage + "개의 읽지 않은 우편이 존재합니다!", ChatType.System); } }
/// <summary> /// 해당 그룹의 채팅 기록을 가져옵니다. /// </summary> /// <param name="limit">끝에서부터 몇번째까지 가져올지 설정합니다.</param> /// <returns></returns> public string GetChattingData(int limit = 1000) { string data = ""; MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM group_chat_report where group_name=?id ORDER BY no DESC limit ?line"); node["line"] = limit; node["id"] = key; using (node.ExecuteReader()) { while (node.Read()) { data = "[" + node.GetDateTime("date").ToString("yyyy-MM-dd HH:mm:ss") + "] " + node.GetString("who") + " : " + node.GetString("data") + "\r\n" + data; } } return(data); }
public override void Start() { base.Start(); // 해당 유저에게도 월드에 있는 다른 오브젝트 표시 foreach (GameObject item in GameObject.Items.Values) { if (item != this) { JObject json = item.InfoData(); json["type"] = NetworkProtocol.NewObject; socket.Send(json); } } // 인벤토리 로드 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM inventory_items WHERE student_id=?id"); node["id"] = ID; using (node.ExecuteReader()) { while (node.Read()) { JObject item = new JObject(); item["type"] = NetworkProtocol.Inventory_Add; item["no"] = node.GetInt("file_no"); item["size"] = node.GetInt("size"); item["name"] = node.GetString("name"); item["date"] = node.GetDateTime("date"); item["owner"] = node.GetString("owner"); socket.Send(item); } } NetworkMessageList.TipMessage(socket, "가천 빌리지에 오신것을 환영합니다!"); ToChatMessage("가천 빌리지에 오신것을 환영합니다!", ChatType.Notice); ToChatMessage("[컴퓨터 네트워크] 과목에 새로운 게시글이 등록되었습니다.", ChatType.System); ToChatMessage("이승화 : 귓속말 테스트~~~", ChatType.Whisper); ToChatMessage("위의 2개의 메세지는 디버그를 위해 출력되었습니다.", ChatType.Notice); int NewMessage = PostSystem.GetNewMessageCount(ID); if (NewMessage > 0) { ToChatMessage("[우편함] " + NewMessage + "개의 읽지 않은 우편이 존재합니다!", ChatType.System); } }
public static void GetItem(User user, int no) { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM post_name where receiver=?receiver and no=?no"); node["no"] = no; node["receiver"] = user.ID; using (node.ExecuteReader()) { if (node.Read() == false) { user.ToChatMessage("존재하지 않거나 권한이 없는 우편입니다.", ChatType.System); return; } if (node.GetInt("read") == 0) { // 읽음 표시 MysqlNode update = new MysqlNode(private_data.mysqlOption, "UPDATE post SET `read`=1 where no=?no"); update["no"] = no; update.ExecuteNonQuery(); } JObject json = new JObject(); json["type"] = NetworkProtocol.Post_Detail; json["title"] = node.GetString("title"); json["content"] = node.GetString("content"); json["no"] = no; json["sender"] = node.GetString("sender_name"); json["sender_id"] = node.GetString("sender"); DateTime date = node.GetDateTime("date"); if (date.DayOfYear == DateTime.Now.DayOfYear) { json["date"] = date.ToString("HH:mm:ss"); } else { json["date"] = date.ToString("yyyy-MM-dd"); } user.socket.Send(json); } }
/// <summary> /// Mysql에서 파일 정보를 불러옵니다. (type, no size, name, date, owner) /// </summary> /// <param name="no">mysql에 입력된 row 번호</param> /// <returns></returns> public static JObject GetFileItem(int no) { // 해당 번호의 파일이 실제로 있는지 확인 + 파일 정보 불러오기 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT file.name, file.size, account.name as owner, date FROM file join account on file.owner=account.id where file_no=?no"); node["no"] = no; JObject item = null; using (node.ExecuteReader()) { if (node.Read()) { item = new JObject(); item["type"] = NetworkProtocol.Inventory_Add; item["no"] = no; item["size"] = node.GetInt("size"); item["name"] = node.GetString("name"); item["date"] = node.GetDateTime("date"); item["owner"] = node.GetString("owner"); return(item); } } return(null); }
/// <summary> /// node를 실행하고 time 주변만 저장. /// </summary> /// <param name="node"></param> /// <param name="time"></param> /// <returns></returns> private static double SQLExecute(MysqlNode node, DateTime set_date) { TimeSpan set_time = new TimeSpan(set_date.Hour, set_date.Minute, set_date.Second); List <int> data = new List <int>(); using (node.ExecuteReader()) { while (node.Read()) { DateTime item_date = node.GetDateTime("date"); TimeSpan item_time = new TimeSpan(item_date.Hour, item_date.Minute, item_date.Second); TimeSpan span = item_time - set_time; double minute = Math.Abs(span.TotalMinutes); if (minute <= 30) { data.Add(node.GetInt("waiting")); } } } double avg = 0; foreach (int i in data) { avg += i; } if (data.Count == 0) { return(-1); } else { return(avg / data.Count); } }
/// <summary> /// 해당 유저가 이 스터디그룹에 상호작용을 요청했을때 실행되는 함수입니다. /// </summary> /// <param name="user">상호작용을 요청한 유저</param> /// <param name="Tab">윈도우 Tab (Main, Member, File, Chat)</param> public void OpenMenu(User user, string Tab = "Main") { // 해당 유저의 권한 체크 int level = GetLevel(user); // 가입 정보를 찾을수 없는 경우 (-1) if (level == -1) { // 가입 윈도우 띄우기 JObject json = new JObject(); json["type"] = NetworkProtocol.Study_SignUp; json["name"] = name; json["ui"] = true; user.socket.Send(json); } else if (level == 0) // 가입 정보는 있지만 마스터의 수락을 받지 못한 경우 (0) { user.ToChatMessage("해당 그룹에 이미 가입 요청을 보냈습니다.", ChatType.Notice); } else if (level == 1) // 해당 그룹의 구성원인 경우 { // 메뉴에 따른 내용 전달 JObject json = new JObject(); json["type"] = NetworkProtocol.Study_UI; json["name"] = key; json["tab"] = Tab; if (Tab == "Main") // 메인 메뉴인 경우 { // 마스터 이름, 그룹개설일, 멤버수 정보를 반환 메세지에 담는다. MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM group_info WHERE group_name=?id"); node["id"] = key; using (node.ExecuteReader()) { if (node.Read()) { json["master_name"] = node.GetString("master_name"); json["master_id"] = node.GetString("master_id"); json["start_date"] = node.GetDateTime("start_date"); json["count"] = node.GetInt("member"); } } } else if (Tab == "Member") // 멤버 메뉴일 경우 { // 멤버 정보를 반환 메세지에 담는다. JArray array = new JArray(); MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM group_member WHERE group_id=?id"); node["id"] = key; using (node.ExecuteReader()) { while (node.Read()) { JObject item = new JObject(); item["level"] = node.GetInt("level"); item["no"] = node.GetString("studentnumber"); item["name"] = node.GetString("name"); item["department"] = node.GetString("department"); item["student_id"] = node.GetString("student_id"); item["email"] = node.GetString("email"); array.Add(item); } } json["items"] = array; } else if (Tab == "File") { // 파일 목록을 메세지에 담는다. json["items"] = Files; } else if (Tab == "Chat") { // 채팅기록중 마지막 20줄을 반환 메세지에 담는다. json["items"] = GetChattingData(20); } user.socket.Send(json); } }
public static void GetPage(User user, int page_no) { if (page_no < 1) { page_no = 1; } int newcount = PostSystem.GetNewMessageCount(user.ID); int count = PostSystem.GetMessageCount(user.ID); int all_page = 1; if (count == 0) { all_page = 1; } else { all_page = (count - 1) / 5 + 1; } if (page_no > all_page) { page_no = all_page; } MysqlNode mysqlNode = new MysqlNode(private_data.mysqlOption, "SELECT * FROM post_name where receiver=?id order by date desc limit " + ((page_no - 1) * 5) + ", 5"); mysqlNode["id"] = user.ID; JArray array = new JArray(); using (mysqlNode.ExecuteReader()) { while (mysqlNode.Read()) { JObject item = new JObject(); item["title"] = mysqlNode.GetString("title"); string content = WebSupport.ParseSupport.NoEnterString(mysqlNode.GetString("content")); if (content.Length < 20) { item["content"] = content; } else { item["content"] = content.Substring(0, 20) + "..."; } item["no"] = mysqlNode.GetInt("no"); item["sender"] = mysqlNode.GetString("sender_name"); DateTime date = mysqlNode.GetDateTime("date"); if (date.DayOfYear == DateTime.Now.DayOfYear) { item["date"] = date.ToString("HH:mm:ss"); } else { item["date"] = date.ToString("yyyy-MM-dd"); } item["read"] = mysqlNode.GetInt("read"); array.Add(item); } } JObject json = new JObject(); json["type"] = NetworkProtocol.Post_Open; json["items"] = array; json["newcount"] = newcount; json["count"] = count; json["page"] = page_no; json["all_page"] = all_page; user.socket.Send(json); }