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 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 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); } }
/// <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 static void SendPost(string title, string content, string sender, string receiver, bool notice = true, int file_no = -1) { DateTime date = DateTime.Now; MysqlNode Node = new MysqlNode(private_data.mysqlOption, "INSERT INTO post(title, content, sender, receiver, date, file) VALUES (?title, ?content, ?sender, ?receiver, ?date, ?file)"); Node["title"] = title; Node["content"] = content; Node["sender"] = sender; Node["receiver"] = receiver; Node["date"] = date.ToString("yyyy-MM-dd HH:mm:ss"); if (file_no != -1) { Node["file"] = file_no; } else { Node["file"] = null; } long result = Node.ExecuteInsertQuery(); // 받는사람이 게임 또는 스마트폰을 통해 접속중인가 ESocket socket = GachonSocket.GetOnlineUser(receiver); if (socket != null) { if (notice == true) { if (User.Items.ContainsKey(socket)) { User.Items[socket].ToChatMessage("[우편함] 새로운 메세지가 도착했습니다.", ChatType.System); return; } } JObject json = new JObject(); json["type"] = NetworkProtocol.PostAlarm; json["no"] = result; socket.Send(json); } }
/// <summary> /// 유저가 가입 신청을 할때 실행되는 함수입니다. /// </summary> /// <param name="user">가입 신청할 유저</param> public void SignUpRequest(User user) { // 해당 유저가 이 그룹에 대해 아무런 정보가 없을때 if (GetLevel(user) == -1) { // 그룹 구성원 목록에 레벨 0으로 추가 MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO takes_course(student_id,course_no,level) VALUES (?id,?name,?level)"); node["id"] = user.ID; node["name"] = key; node["level"] = 0; node.ExecuteInsertQuery(); // 가입 완료 메세지 전송 JObject json = new JObject(); json["type"] = NetworkProtocol.Study_SignUp; json["ui"] = false; user.socket.Send(json); user.ToChatMessage(key + "그룹에 가입 신청을 완료했습니다.", ChatType.Notice); // 마스터에게 가입 메세지 전송 PostSystem.SendPost("그룹 가입 신청", "스터디 그룹\r\n[" + key + "]\r\n\r\n가입 신청자\r\n" + user.name + " (" + user.gachonAccount.StudentNumber + ")\r\n\r\n새로운 회원가입 요청이 있습니다. 해당 그룹의 구역에서 가입 요청을 처리할 수 있습니다.", "admin_group", master); } }
/// <summary> /// 해당 유저가 채팅을 시작합니다. 이 함수에서 명령어 구문 분석이 실행됩니다. /// </summary> /// <param name="message">입력 메세지</param> /// <param name="Type">입력 메세지 타입 (ChatType)</param> public override void ChatMessage(string message, int Type) { //Dice JObject json = new JObject(); json["type"] = NetworkProtocol.Chat; if (message.IndexOf("/주사위") == 0) { Random rd = new Random(); json["chattype"] = ChatType.Notice; json["message"] = name + "(이)가 주사위를 굴렸습니다~!! 주사위가 " + rd.Next(1, 6).ToString() + " 나왔습니다!"; NetworkSend.SendAllUser(json); return; } //Whisper if ((message.IndexOf("/ㅈ ") == 0) || (message.IndexOf("/w ") == 0) || (message.IndexOf("/귓속말 ") == 0)) { string[] Receiver = message.Split(' '); //형식이 맞는지 확인 if (Receiver.Length > 2) { for (int i = 3; i < Receiver.Length; i++) { Receiver[2] += " " + Receiver[i]; } string receiverID = GachonUser.GetID(Receiver[1]); //Sender가 입력한 이름을 통해 귓속말 대상 ID를 얻음 //대상이 접속해있는지 아닌지 확인 foreach (User user in User.Items.Values.ToList()) { if (user.ID.Equals(receiverID)) { json["chattype"] = ChatType.Whisper; json["message"] = Receiver[2]; //메세지 내용 json["no"] = no; json["sender"] = name; user.socket.Send(json); json["group"] = "To " + Receiver[1]; //json["sender"] = "["+Receiver[1]+"]"+ name; //Sender에게 [Reiever]Sender: Content 로 보이도록 this.socket.Send(json); return; } } json["message"] = "[귓속말] 현재 접속해있지 않는 사용자입니다."; } else { json["message"] = "[귓속말] 잘못된 귓속말 형식 입니다. '/w 대상 내용' 으로 입력해 주세요."; } json["chattype"] = ChatType.System; socket.Send(json); return; } // 해당 영역이 그룹의 영역일때 string ingroup = InGroup(); if (ingroup != null) { List <string> idlist = Study.Items[ingroup].Users; if (idlist.Contains(ID)) { json["chattype"] = ChatType.Group; json["message"] = message; json["no"] = no; json["sender"] = name; json["group"] = ingroup; foreach (User user in User.Items.Values) { if (idlist.Contains(user.ID)) { user.socket.Send(json); } } MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO group_chat(group_name, student_id, data) VALUES (?group, ?id, ?data)"); node["group"] = ingroup; node["id"] = ID; node["data"] = message; node.ExecuteInsertQuery(); } else { base.ChatMessage(message, Type); } } else { base.ChatMessage(message, Type); } }