Exemplo n.º 1
0
        /// <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, "오류로 인해 처리되지 않았습니다.");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 가천 라이브러리에서 새로운 게시글이 올라오면 이 함수를 이벤트로 실행시킵니다.
        /// </summary>
        /// <param name="gclass">게시글이 올라온 강의</param>
        /// <param name="postItem">게시글</param>
        public static void NewPost(GachonClass gclass, PostItem postItem)
        {
            MysqlNode node      = new MysqlNode(private_data.mysqlOption, "SELECT * FROM keyword");
            JArray    array     = new JArray();
            string    ignore_id = "";

            using (node.ExecuteReader())
            {
                while (node.Read())
                {
                    if (ignore_id == node.GetString("student_id"))
                    {
                        continue;
                    }
                    string keyword = node.GetString("keyword");
                    if (CheckValid(keyword, gclass.Title, postItem.Title))
                    {
                        ignore_id = node.GetString("student_id");
                        PostSystem.SendPost(
                            string.Format("[{0}] 새로운 게시글 등록", gclass.Title),
                            string.Format("[게시글 정보]\r\n{0} - {1}\r\n\r\n{2}\r\n\r\nURL : {3}", postItem.Title, postItem.Publisher, postItem.Content, postItem.url),
                            "admin_keyword",
                            ignore_id
                            , false);
                        ESocket socket = GachonSocket.GetOnlineUser(ignore_id);
                        if (socket != null)
                        {
                            if (User.Items.ContainsKey(socket))
                            {
                                User.Items[socket].ToChatMessage("[" + gclass.Title + "] 에 새로운 게시글이 등록되었습니다.", ChatType.System);
                                if (postItem.posttype == BoardType.PostType.Homework)
                                {
                                    NetworkMessageList.AddHomework(socket,
                                                                   gclass.Title,
                                                                   postItem.Title,
                                                                   postItem.e_time);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
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);
            }
        }
Exemplo n.º 4
0
        public static void NewStudy(User user, JObject message)
        {
            string key = (string)message["name"];

            if (key.Length < 2 || key.Length > 10)
            {
                NetworkMessageList.TipMessage(user.socket, "스터디 이름은 2글자 이상 10글자 이내입니다.");
                return;
            }
            MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO course(no,type,name) VALUES (?name,'Group',?name)");

            node["name"] = key;
            int result = node.ExecuteNonQuery();

            if (result == -1)
            {
                NetworkMessageList.TipMessage(user.socket, "이미 같은 이름의 스터디 그룹이 존재합니다.");
                return;
            }
            else if (result <= 0)
            {
                NetworkMessageList.TipMessage(user.socket, "데이터베이스의 예기치 못한 오류가 있습니다.");
                return;
            }
            // 현재 위치를 데이터베이스에 저장
            Vector4 position = user.position;

            node           = new MysqlNode(private_data.mysqlOption, "INSERT INTO `group`(group_name,master,x,y,z,q) VALUES (?name,?master,?x,?y,?z,?q)");
            node["name"]   = key;
            node["master"] = user.ID;
            node["x"]      = position.x;
            node["y"]      = position.y;
            node["z"]      = position.z;
            node["q"]      = position.q;
            node.ExecuteNonQuery();

            node        = new MysqlNode(private_data.mysqlOption, "INSERT INTO takes_course(student_id,course_no) VALUES (?id,?key)");
            node["id"]  = user.ID;
            node["key"] = key;
            node.ExecuteNonQuery();
            // 성공적으로 만들어진경우
            Study group = new Study(key, position);

            group.Start();

            JObject json = new JObject();

            json["type"] = NetworkProtocol.CloseNewStudy;
            user.socket.Send(json);
            NetworkMessageList.TipMessage(user.socket, "스터디 그룹을 성공적으로 만들었습니다!");
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("스터디 이름 : " + key);
            sb.AppendLine("그룹 마스터 : " + user.ID);
            sb.AppendLine("");
            sb.AppendLine("새로운 스터디를 개설하신것을 축하드립니다!!!");
            sb.AppendLine("스터디의 펫말을 통해 새로운 그룹원을 초대하고, 그룹 내에서 진행된 대화를 확인할 수 있습니다.");
            sb.AppendLine("");
            sb.AppendLine("앞으로 더 많은 기능이 추가될 예정이니 많은 관심 부탁드립니다~~");
            sb.AppendLine("");
            sb.AppendLine("만약 스터디 그룹에 대해 문의사항이 있다면");
            sb.AppendLine("스터디 알림(admin_group)으로 메세지를 보내주시기 바랍니다.");
            sb.AppendLine("");
            sb.AppendLine("-가천 빌리지-");
            PostSystem.SendPost("새로운 스터디가 만들어졌습니다.", sb.ToString(), "admin_group", user.ID);
        }
Exemplo n.º 5
0
        private static void Server_Receive(ESocket socket, JObject Message)
        {
            if ((int)Message["type"] >= 1000)
            {
                switch ((int)Message["type"])
                {
                case AndroidProtocol.TestMessage:
                    Console.WriteLine("안드로이드 테스트 메세지 : " + (string)Message["message"]);
                    break;

                case AndroidProtocol.Login:
                    Function.Login(socket, (string)Message["id"], (string)Message["password"], false);
                    break;

                case AndroidProtocol.GroupList:
                    AndroidFunction.SendTakesList(socket);
                    return;

                case AndroidProtocol.KeywordList:
                    AndroidFunction.KeywordList(socket);
                    break;

                case AndroidProtocol.KeywordAdd:
                    AndroidFunction.NewKeyword(socket, (string)Message["keyword"]);
                    break;

                case AndroidProtocol.PostList:
                    if (Message["no"] != null)
                    {
                        AndroidFunction.GetPostList(socket, (int)Message["no"]);
                    }
                    break;

                case AndroidProtocol.Info:
                    AndroidFunction.ReturnInfo(socket);
                    break;
                }
            }
            else
            {
                switch ((int)Message["type"])
                {
                case NetworkProtocol.Login:
                    Function.Login(socket, (string)Message["id"], (string)Message["password"], true);
                    break;

                case NetworkProtocol.EnterWorld:
                    User.Items[socket].Start();
                    break;

                case NetworkProtocol.Move:
                    User.Items[socket].Move(new Vector4((float)Message["x"], (float)Message["y"], (float)Message["z"], (float)Message["q"]));
                    break;

                case NetworkProtocol.Chat:
                    User.Items[socket].ChatMessage((string)Message["message"], ChatType.Normal);
                    break;

                case NetworkProtocol.Action:
                    Function.NPC_Action((NPC)GameObject.Items[(int)Message["no"]], User.Items[socket]);
                    break;

                case NetworkProtocol.Post_Open:
                    PostSystem.GetPage(User.Items[socket], (int)Message["page"]);
                    break;

                case NetworkProtocol.Post_Detail:
                    PostSystem.GetItem(User.Items[socket], (int)Message["no"]);
                    break;

                case NetworkProtocol.NewStudy:
                    StudySystem.NewStudy(User.Items[socket], Message);
                    break;

                case NetworkProtocol.Keyword_Remove:
                    KeywordSystem.RemoveItem(User.Items[socket], (string)Message["keyword"]);
                    break;

                case NetworkProtocol.Keyword_Add:
                    KeywordSystem.AddItem(User.Items[socket], (string)Message["keyword"]);
                    break;

                case NetworkProtocol.Inventory_Remove:
                    User.Items[socket].RemoveItem((int)Message["no"]);
                    break;

                case NetworkProtocol.File_Download:
                    User.Items[socket].DownloadItem((int)Message["no"], (string)Message["path"], (bool)Message["open"]);
                    break;

                case NetworkProtocol.Study_SignUp:
                    Study.Items[(string)Message["name"]].SignUpRequest(User.Items[socket]);
                    break;

                case NetworkProtocol.Study_UI:
                    Study.Items[(string)Message["name"]].OpenMenu(User.Items[socket], (string)Message["tab"]);
                    break;

                case NetworkProtocol.Study_Member_Request:
                    Study.Items[(string)Message["name"]].Member_Modify(User.Items[socket], Message);
                    break;

                case NetworkProtocol.Study_SaveChatting:
                    Study.Items[(string)Message["name"]].SaveChatting(User.Items[socket]);
                    break;

                case NetworkProtocol.Study_FileUpload:
                    Study.Items[(string)Message["group_name"]].FileUpload(User.Items[socket], (int)Message["no"]);
                    break;

                case NetworkProtocol.Study_FileDownload:
                    Study.Items[(string)Message["group_name"]].FileDownload(User.Items[socket], (int)Message["no"]);
                    break;

                case NetworkProtocol.SendPost:
                    NetworkMessageList.SendMessageResult(socket, PostSystem.SendPost(socket, Message));
                    break;

                case NetworkProtocol.GetFileInPost:
                    PostSystem.GetFile(socket, Message);
                    break;
                }
            }
        }