/// <summary> /// 인벤토리에 있는 아이템을 바탕으로 해당 클라이언트가 강제로 파일을 다운로드 받도록 만듭니다. /// </summary> /// <param name="no">MYSQL에 등록된 파일 번호입니다</param> /// <param name="user_path">해당 클라이언트에 저장될 경로입니다.</param> /// <param name="open">클라이언트가 다운로드 완료시 파일 자동 오픈을 요청했는지 여부입니다.</param> public bool DownloadItem(int no, string user_path, bool open) { // 인벤토리에 해당 파일이 존재하는지 확인 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM inventory WHERE student_id=?id AND file_no=?no"); node["id"] = ID; node["no"] = no; using (node.ExecuteReader()) { if (!node.Read()) { ToChatMessage("해당 아이템에 대한 권한이 없습니다.", ChatType.Notice); return(false); } } // 파일 정보 불러오기 node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM file where file_no=?no"); node["no"] = no; using (node.ExecuteReader()) { if (node.Read()) { NServerFile file = new NServerFile(socket, node.GetString("path")); JObject json = new JObject(); json["path"] = user_path; json["open"] = open; // 유저가 파일 열기를 눌렀는 지 여부로 반환해준다. socket.SendFile(json, file); return(true); } } return(false); }
/// <summary> /// 동일한 사이트 생성일 경우 기존 객체를 연결시킨다. /// </summary> /// <param name="site"></param> public void CombineSite(Site site, bool want_insert_sql = true) { lock (Sites) { if (want_insert_sql) { MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "UPDATE course set " + site.Type.ToLower() + " = ?site_id where no = ?key "); node["site_id"] = site.ID; node["key"] = Key; node.ExecuteNonQuery(); } // 이때 동일한 사이트가 존재할 경우 새로 추가하려는 객체를 추가하지 않고 // 기존 객체를 연결한다. if (GachonObjects.AllSite.ContainsKey(site.Type + site.ID)) { site = GachonObjects.AllSite[site.Type + site.ID]; } else { GachonObjects.AllSite.Add(site.Type + site.ID, site); site.Start(); } // 이 강의에 사이트 연결 Sites.Add(site.Type, site); // 해당 사이트에 새로운 게시글이 올라올경우 이벤트 실행 site.NewPost += Site_NewPost; } }
public static JObject GetCommentList(int no) { MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM board_writer WHERE parent_no = ?no ORDER BY no"); node["no"] = no; JObject json = new JObject(); json["type"] = PacketType.ReadComments; json["no"] = no; JArray list = new JArray(); using (node.ExecuteReader()) { while (node.Read()) { JObject item = new JObject(); item["no"] = node.GetInt("no"); item["content"] = node.GetString("content"); item["time"] = node.GetString("time"); item["user_id"] = node.GetInt("user_id"); item["name"] = node.GetString("name"); list.Add(item); } } json["list"] = list; return(json); }
public static void NewKeyword(ESocket socket, string keyword) { string id = GachonSocket.GetId(socket); if (id != null) { keyword = keyword.Trim(); if (keyword.Length == 0) { NetworkMessageList.TipMessage(socket, "추가하실 키워드를 입력해주세요."); return; } MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO keyword(student_id, keyword) VALUES (?id, ?keyword)"); node["id"] = id; node["keyword"] = keyword; int result = node.ExecuteNonQuery(); if (result != 1) { NetworkMessageList.TipMessage(socket, "이미 등록된 키워드입니다."); } else if (result == 0) { NetworkMessageList.TipMessage(socket, "오류로 인해 키워드 추가가 불가능합니다 (ERROR CODE : " + result + ")"); } else { NetworkMessageList.TipMessage(socket, "[키워드] \"" + keyword + "\" 가 추가되었습니다."); KeywordList(socket); } } }
public static void GetFile(ESocket socket, JObject message) { // 파일 다운로드는 게임에서만 지원 if (User.Items.ContainsKey(socket)) { User user = User.Items[socket]; // 요청한 파일, 우편이 실제 있는지 확인 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT 'true' FROM post WHERE no=?no and file=?file_no and receiver=?id"); node["no"] = (int)message["post_no"]; node["file_no"] = (int)message["file_no"]; node["id"] = user.ID; using (node.ExecuteReader()) { if (node.Read()) { if (user.AddFileItem((int)message["file_no"])) { NetworkMessageList.TipMessage(socket, "우편함의 첨부파일이 인벤토리에 추가되었습니다."); } else { NetworkMessageList.TipMessage(socket, "파일이 이미 인벤토리에 존재합니다."); } } else { NetworkMessageList.TipMessage(socket, "잘못된 요청입니다."); } } } }
public static void SendTakesList(ESocket socket) { string id = GachonSocket.GetId(socket); if (id != null) { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM takes_course JOIN course ON takes_course.course_no=course.no WHERE student_id=?id"); node["id"] = id; JArray group = new JArray(); JArray course = new JArray(); using (node.ExecuteReader()) { while (node.Read()) { if (node.GetString("type") == "Class") { course.Add(node.GetString("name")); } else if (node.GetString("type") == "Group") { group.Add(node.GetString("name")); } } } JObject json = new JObject(); json["type"] = AndroidProtocol.GroupList; json["group"] = group; json["class"] = course; socket.Send(json); } }
//맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 이때 읽어올 때는 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 void Init_Load() { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM npc"); using (node.ExecuteReader()) { while (node.Read()) { NPC npc = new NPC(); npc.skin = node.GetString("skin"); npc.name = node.GetString("name"); npc.function = node.GetString("function"); npc.position = new Vector4(node.GetFloat("x"), node.GetFloat("y"), node.GetFloat("z"), node.GetFloat("q")); MysqlNode messagenode = new MysqlNode(private_data.mysqlOption, "SELECT * FROM npc_message WHERE npc_no=?no"); messagenode["no"] = node.GetInt("npc_no"); using (messagenode.ExecuteReader()) { while (messagenode.Read()) { npc.AddMessage(messagenode.GetString("message")); Console.WriteLine("NPC " + npc.name + " 메세지 입력 -> " + messagenode.GetString("message")); } } npc.Start(); Console.WriteLine("NPC " + npc.name + " 추가"); } } Group_Load(); }
/// <summary> /// 특정 유저가 파일을 그룹에 추가합니다. (파일은 이미 업로드된 상태) /// </summary> /// <param name="user">파일을 올릴 유저</param> /// <param name="no">파일 번호 (Mysql)</param> public void FileUpload(User user, int no) { // 해당 유저의 권한 체크 int level = GetLevel(user); if (GetLevel(user) < 1) { user.ToChatMessage("해당 그룹에 파일을 업로드할 권한이 없습니다.", ChatType.Notice); return; } if (!user.HaveItem(no)) // 해당 유저가 그 아이템(파일)을 정말 가지고 있는가 { NetworkMessageList.TipMessage(user.socket, "해당 파일이 인벤토리에 없어서 업로드에 실패했습니다."); return; } // Mysql에 파일 정보 추가 MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO group_file(group_name, file_no, upload_user) VALUES (?group_name, ?file_no, ?user)"); node["group_name"] = key; node["file_no"] = no; node["user"] = user.ID; int result = node.ExecuteNonQuery(); if (result > 0) { NetworkMessageList.TipMessage(user.socket, "파일을 스터디에 성공적으로 업로드했습니다."); OpenMenu(user, "File"); } else { NetworkMessageList.TipMessage(user.socket, "예기치 못한 오류로 업로드에 실패했습니다."); } }
public static void UpdateWaiting(OnlineUser user, int no, int time) // 0~1~2 { // 수신 금지 목록에 등록 OnlineUser.receive_waiting_user.Add(user.id); user.Message("소중한 정보 감사합니다."); MysqlNode node = new MysqlNode(Program.mysqlOption, "INSERT INTO waiting_data (restaurant_no, user_id, waiting) VALUES (?restaurant_no, ?user_id, ?waiting)"); node["restaurant_no"] = no; node["user_id"] = user.id; if (time < 2) { node["waiting"] = time * 5; } else { node["waiting"] = 15; } node.ExecuteNonQuery(); int?result = AutoWaitingComputing.Update(no); foreach (int id in GetWaitingListener(no)) { OnlineUser.Notify(id, "waiting", no, GetTitle(no) + " 대기 시간 수신", "예상 시간 : " + result.Value + "분"); } }
private static void Server_FileInfoReceive(ESocket socket, JObject Message, NetworkFile file) { if (!Directory.Exists("files")) { Directory.CreateDirectory("files"); } string name; do { name = DateTime.Now.ToString("yyyy-MM-dd") + file.FileName.GetHashCode() + new Random().Next(0, 1000000); }while (File.Exists("files/" + name)); file.Success += delegate(NetworkFile files) { // Mysql에 등록. 알려줌 MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO file(name,size,path,owner,date) VALUES (?name,?size,?path,?owner,?date)"); node["name"] = files.FileName; node["size"] = files.FileSize; node["path"] = "files/" + name; node["owner"] = User.Items[socket].ID; node["date"] = DateTime.Now; long no = node.ExecuteInsertQuery(); User.Items[socket].AddFileItem((int)no); }; file.Accept("files/" + name); }
public static JObject RankingList(String category) { JObject json = new JObject(); json["type"] = PacketType.RestaurantRankingList; json["category"] = category; MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM restaurant join rest_likes on restaurant.no=rest_likes.no WHERE category REGEXP (?data) ORDER BY likes desc"); node["data"] = category.Replace(",", "|"); JArray list = new JArray(); json["list"] = list; using (node.ExecuteReader()) { while (node.Read()) { JObject item = new JObject(); item["no"] = node.GetInt("no"); item["title"] = node.GetString("title"); item["time"] = node.GetString("computed_waiting"); item["likes"] = node.GetString("likes"); item["category"] = node.GetString("category"); list.Add(item); } } return(json); }
public static JObject WaitingList() { MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM restaurant"); JObject json = new JObject(); json["type"] = PacketType.RestaurantWaitingList; JArray list = new JArray(); using (node.ExecuteReader()) { while (node.Read()) { if (!node.IsNull("mapx")) { JObject item = new JObject(); item["no"] = node.GetInt("no"); item["title"] = node.GetString("title"); item["time"] = node.GetString("computed_waiting"); item["x"] = node.GetDouble("mapx"); item["y"] = node.GetDouble("mapy"); list.Add(item); } } } json["list"] = list; return(json); }
public static void AddItem(User user, string keyword) { keyword = keyword.Trim(); if (keyword.Length == 0) { NetworkMessageList.TipMessage(user.socket, "추가하실 키워드를 입력해주세요."); return; } MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO keyword(student_id, keyword) VALUES (?id, ?keyword)"); node["id"] = user.ID; node["keyword"] = keyword; int result = node.ExecuteNonQuery(); if (result != 1) { NetworkMessageList.TipMessage(user.socket, "이미 등록된 키워드입니다."); } else if (result == 0) { NetworkMessageList.TipMessage(user.socket, "오류로 인해 키워드 추가가 불가능합니다 (ERROR CODE : " + result + ")"); } else { user.ToChatMessage("[키워드] \"" + keyword + "\" 가 추가되었습니다.", ChatType.Notice); GetList(user); } }
//맨 처음 서버를 셋팅을 함. 표에 있는 모든 강의를 읽어온다. 읽어올 때는 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); } } } }
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 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 int GetMessageCount(string id) { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT count(*) as ncount from post where receiver=?id"); node["id"] = id; using (node.ExecuteReader()) { node.Read(); return(node.GetInt("ncount")); } }
/// <summary> /// 마스터가 특정 유저의 권한을 변경하는 경우 이 함수를 실행합니다. /// </summary> /// <param name="user">변경을 시도하는 주체입니다.(권한이 있어야함)</param> /// <param name="json">변경 내용이 담긴 JObject입니다 ( (string)id, (bool)positive - 수락여부)</param> public void Member_Modify(User user, JObject json) { if (user.ID == (string)json["id"]) { NetworkMessageList.TipMessage(user.socket, "자기 자신은 탈퇴시킬 수 없습니다. 메인메뉴 탭을 이용해주세요."); return; } if (master != user.ID) { NetworkMessageList.TipMessage(user.socket, "해당 그룹의 마스터만 이 작업을 수행할 수 있습니다."); return; } MysqlNode node; int old_level = GetLevel((string)json["id"]);; // 이전의 레벨을 기억한다. if ((bool)json["positive"]) // 가입 요청 수락 { node = new MysqlNode(private_data.mysqlOption, "UPDATE takes_course SET level=?level WHERE course_no=?group_name AND student_id=?id AND level=?old_level"); node["old_level"] = 0; node["level"] = 1; } else { node = new MysqlNode(private_data.mysqlOption, "DELETE FROM takes_course WHERE course_no=?group_name AND student_id=?id"); } node["group_name"] = key; node["id"] = (string)json["id"]; int result = node.ExecuteNonQuery(); // MYSQL 실행 if (result > 0) // 성공한경우 { OpenMenu(user, "Member"); // 변경 주체의 윈도우를 갱신시킨다. (새로고침) NetworkMessageList.TipMessage(user.socket, "요청이 정상적으로 처리되었습니다."); if ((bool)json["positive"]) // 긍정적인 요청 { PostSystem.SendPost("그룹에 가입되었습니다.", "스터디 그룹 [" + name + "] 에 가입되었습니다!\r\n\r\n해당 그룹에서 많은 활동 부탁드립니다.", master, (string)json["id"]); } else // 부정적인 요청 (탈퇴) { if (old_level == 1) // 이전에 해당 유저가 회원이었을 경우 { PostSystem.SendPost("그룹에서 강퇴되었습니다.", "스터디 그룹 [" + name + "] 에서 강퇴되었음을 알립니다.", master, (string)json["id"]); } else // 이전에 해당 유저가 회원이 아니었던 경우 { PostSystem.SendPost("그룹 가입 신청이 거절되었습니다.", "스터디 그룹 [" + name + "] 에서 가입 신청이 거절됨을 알립니다.", master, (string)json["id"]); } } } else { NetworkMessageList.TipMessage(user.socket, "오류로 인해 처리되지 않았습니다."); } }
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); } }
private void TableTest(string table) { try { MysqlNode node = new MysqlNode(option, "SELECT * FROM " + table); using (node.ExecuteReader()); } catch (Exception e) { Assert.Fail(e.Message); } }
public static bool WriteArticle(OnlineUser user, string content, int parent_no = 0) { if (string.IsNullOrEmpty(content)) { user.Message("내용을 입력해주세요."); return(false); } MysqlNode menu_update = new MysqlNode(Program.mysqlOption, "INSERT INTO board (user_id, content, parent_no) VALUES (?user_id, ?content, ?parent_no)"); menu_update["user_id"] = user.id; menu_update["content"] = content; if (parent_no == 0) { menu_update["parent_no"] = null; } else { menu_update["parent_no"] = parent_no; } long result = menu_update.ExecuteInsertQuery(); if (result > 0) { if (parent_no == 0) { JObject json = new JObject(); json["type"] = PacketType.WriteBoardItem; json["item"] = ((JArray)GetList((int)result)["list"])[0]; OnlineUser.SendAll(json); } else { user.Send(GetCommentList(parent_no)); List <int> RelatedUser = GetRelatedUser(parent_no); foreach (int id in RelatedUser) { if (id != user.id) // 올린 사람은 제외 { OnlineUser.Notify(id, "comment", (int)result, "내가 올린 게시글에 답변이 등록되었습니다.", "(" + user.name + ") " + content); } } } user.Message("등록에 성공했습니다."); return(true); } else { user.Message("등록에 실패했습니다."); return(false); } }
public static JObject Infomation(int id) { MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM restaurant WHERE no = ?no"); node["no"] = id; using (node.ExecuteReader()) { if (node.Read()) { JObject json = new JObject(); json["type"] = PacketType.RestaurantInfo; json["title"] = node.GetString("title"); json["category"] = node.GetString("category"); json["description"] = node.GetString("description"); json["address"] = node.GetString("roadAddress"); json["image"] = node.GetString("image"); if (node.IsNull("computed_waiting")) { json["waiting"] = null; } else { json["waiting"] = node.GetInt("computed_waiting"); } JArray menus = new JArray(); MysqlNode menu_node = new MysqlNode(Program.mysqlOption, "SELECT * FROM menu WHERE restaurant_no = ?no ORDER BY priority"); menu_node["no"] = id; using (menu_node.ExecuteReader()) { while (menu_node.Read()) { JObject menu = new JObject(); menu["name"] = menu_node.GetString("name"); menu["price"] = menu_node.GetString("price"); menu["description"] = menu_node.GetString("description"); menu["image"] = menu_node.GetString("image"); menus.Add(menu); } } json["menus"] = menus; return(json); } else { return(null); } } }
public static int GetLikes(int restaurant_no) { MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM rest_likes WHERE no = ?no"); node["no"] = restaurant_no; using (node.ExecuteReader()) { if (node.Read()) { return(node.GetInt("likes")); } } return(0); }
private static void Group_Load() { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM course join `group` on group.group_name=course.no"); using (node.ExecuteReader()) { while (node.Read()) { Study group = new Study(node.GetString("group_name"), new Vector4(node.GetFloat("x"), node.GetFloat("y"), node.GetFloat("z"), node.GetFloat("q"))); group.Start(); Console.WriteLine("Group " + group.name + " 추가"); } } }
/// <summary> /// Mysql에 파일 정보(메타데이터)를 입력합니다. /// </summary> /// <param name="path">파일 실제 경로</param> /// <param name="original_file_name">서버에 입력될 파일 이름</param> /// <param name="owner">파일의 주인</param> /// <returns>실제 입력된 row의 번호</returns> public static long FileQuery(string path, string original_file_name, User owner) { FileInfo fileInfo = new FileInfo(path); MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO file(name,size,path,owner,date) VALUES (?name,?size,?path,?owner,?date)"); node["name"] = original_file_name; node["size"] = fileInfo.Length; node["path"] = path; node["owner"] = owner.ID; node["date"] = DateTime.Now; long no = node.ExecuteInsertQuery(); return(no); }
public void Login(string token) { Program.LogSystem.AddLog(4, "LoginModule", "토큰을 통한 로그인 시도 " + token); JObject message = new JObject(); message["type"] = PacketType.Login; if (String.IsNullOrEmpty(token)) { throw new Exception("토큰이 존재하지 않습니다."); } else { JObject data = KakaoModule.GetUserInformation(token); if (data != null) { id = (int)data["id"]; name = (string)data["properties"]["nickname"]; img = (string)data["properties"]["thumbnail_image"]; MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM user WHERE id = ?id"); node["id"] = id; using (node.ExecuteReader()) { MysqlNode update = new MysqlNode(Program.mysqlOption, "SQL"); if (node.Read()) { update.ChangeSql("UPDATE user SET name=?name WHERE id = ?id"); if (!node.IsNull("lat") && !node.IsNull("lon")) { position = new Position(node.GetDouble("lat"), node.GetDouble("lon")); } } else { update.ChangeSql("INSERT INTO user (id,name) VALUES (?id, ?name)"); } update["id"] = id; update["name"] = name; update.ExecuteNonQuery(); } } else { throw new Exception("유효하지 않은 토큰입니다."); } } }
public static Position GetPosition(int no) { MysqlNode node = new MysqlNode(Program.mysqlOption, "SELECT * FROM restaurant WHERE no = ?no"); node["no"] = no; using (node.ExecuteReader()) { if (node.Read()) { Position position = new Position(node.GetDouble("mapy"), node.GetDouble("mapx")); return(position); } } return(null); }
/// <summary> /// 이 그룹이 특정 파일을 가지고 있는지 권한을 체크합니다. /// </summary> /// <param name="no">파일 번호 (Mysql)</param> /// <returns></returns> public bool HaveItem(int no) { MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM group_file_info WHERE group_name=?key AND file_no=?no"); node["key"] = key; node["no"] = no; using (node.ExecuteReader()) { if (node.Read()) { return(true); } } return(false); }