Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        /// <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);
            }
        }
Exemple #6
0
        /// <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);
            }
        }
Exemple #7
0
        /// <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);
            }
        }