Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <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);
            }
        }
Exemplo n.º 10
0
        /// <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);
            }
        }
Exemplo n.º 11
0
        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);
        }