示例#1
0
        /// <summary>
        /// 이 그룹에서 파일을 해당 유저의 인벤토리로 전송하고, 메세지를 표시합니다.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="no"></param>
        public void FileDownload(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;
            }
            if (!HaveItem(no))
            {
                NetworkMessageList.TipMessage(user.socket, "요청하신 파일이 이 그룹에 존재하지 않습니다. (이미 삭제되었을 가능성이 있습니다)");
                return;
            }
            bool result = user.AddFileItem(no);

            if (result)
            {
                NetworkMessageList.TipMessage(user.socket, "인벤토리에 파일이 복사되었습니다.");
            }
            else
            {
                NetworkMessageList.TipMessage(user.socket, "예기치 못한 오류로 인해 파일을 인벤토리에 복사하지 못했습니다.");
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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, "잘못된 요청입니다.");
                    }
                }
            }
        }
示例#4
0
        /// <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 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);
                }
            }
        }
示例#6
0
        public static void Login(ESocket socket, string id, string password, bool GameLogin = true)
        {
            #region 입력값이 비어있는지 체크
            if (id.Trim() == "")
            {
                NetworkMessageList.TipMessage(socket, "아이디를 입력해주세요.");
                return;
            }
            if (password.Trim() == "")
            {
                NetworkMessageList.TipMessage(socket, "비밀번호를 입력해주세요.");
                return;
            }
            #endregion
            // 해당 입력값을 기준으로 GachonUser.GetObject 함수를 실행시킵니다.
            // 유효한 로그인일경우 GachonUser 클래스를 통해 실제 가천대 웹사이트와 세션이 연결되며,
            // 유효하지 않은 로그인일 경우 NULL값을 반환합니다.
            GachonUser gachonAccount = GachonUser.GetObject(id, password);
            if (gachonAccount == null)
            {
                NetworkMessageList.TipMessage(socket, "로그인에 실패했습니다.");
                return;
            }
            // 만약 게임에서 이 로그인을 요청한 경우 (안드로이드가 아닌)
            if (GameLogin)
            {
                // 게임 오브젝트로 관리될 새로운 User 클래스를 만들고, 소켓과 GachonUser 객체를 연결시킵니다.
                User user = null;
                try
                {
                    user = new User(socket, gachonAccount);
                }
                catch (DuplicationError e) // User 클래스는 같은 GachonUser 에 대해 중복으로 생성될수 없기때문에 발생하는 에러입니다.
                {
                    NetworkMessageList.TipMessage(socket, "이 계정은 다른 클라이언트에서 접속중입니다.");
                    return;
                }
                // 유저의 위치를 임의값으로 설정 (시작 포인트)
                user.position = new Vector4(-69.30f, 5.33f, 47.17f, 0f);

                // 접속 성공 메세지 전송
                JObject json = new JObject();
                json["type"] = NetworkProtocol.EnterWorld;
                json["no"]   = user.no; // 플레이어를 나타내는 객체가 무엇인지 알려준다. (서버에서 관리되는 고유 번호)
                socket.Send(json);
            }
            else
            {
                // 로그인 성공 메세지를 보내준다.
                JObject json = new JObject();
                json["type"] = AndroidProtocol.Login;
                json["data"] = id + ":" + password;
                socket.Send(json);
            }
            // 가천 소켓에 이 세션을 연결시킨다.
            GachonSocket.Connect(socket, id, true);
        }
示例#7
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, "오류로 인해 처리되지 않았습니다.");
            }
        }
示例#8
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);
            }
        }
示例#9
0
        public static void RemoveItem(User user, string keyword)
        {
            MysqlNode node = new MysqlNode(private_data.mysqlOption, "DELETE FROM keyword WHERE student_id=?id and keyword=?keyword");

            node["id"]      = user.ID;
            node["keyword"] = keyword;
            int result = node.ExecuteNonQuery();

            if (result != 1)
            {
                NetworkMessageList.TipMessage(user.socket, "오류로 인해 키워드 삭제가 불가능합니다 (ERROR CODE : " + result + ")");
            }
            else
            {
                user.ToChatMessage("[키워드] \"" + keyword + "\" 가 삭제되었습니다.", ChatType.Notice);
                GetList(user);
            }
        }
示例#10
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);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#11
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);
            }
        }
示例#12
0
        /// <summary>
        /// 특정 유저에게 그동안의 채팅 기록을 인벤토리로 전송합니다.
        /// </summary>
        /// <param name="user">파일을 받을 유저</param>
        public void SaveChatting(User user)
        {
            // 권한 체크
            if (GetLevel(user) <= 0)
            {
                NetworkMessageList.TipMessage(user.socket, "권한이 부족합니다.");
                return;
            }
            // 파일 이름 . 그룹 이름에는 특수문자가 들어있을 수 있음 그렇기때문에 파일 이름에 그룹 이름을 추가하지 않음.
            string FileName = FileSystem.GetRandomName(user.ID + key);

            File.AppendAllText(FileName, GetChattingData()); // 파일 쓰기

            // 서버에 새로운 파일 등록
            long no = FileSystem.FileQuery(FileName, DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", user);

            // 유저에게 해당 파일을 인벤토리로 전송
            user.AddFileItem((int)no);
            NetworkMessageList.TipMessage(user.socket, "해당 그룹의 채팅 내용이 인벤토리의 TXT 파일로 저장되었습니다!");
        }
示例#13
0
        public static void Login(ESocket socket, string id, string password)
        {
            if (id.Trim() == "")
            {
                NetworkMessageList.TipMessage(socket, "아이디를 입력해주세요.");
                return;
            }
            if (password.Trim() == "")
            {
                NetworkMessageList.TipMessage(socket, "비밀번호를 입력해주세요.");
                return;
            }
            GachonUser gachonAccount = GachonUser.GetObject(id, password);

            if (gachonAccount == null)
            {
                NetworkMessageList.TipMessage(socket, "로그인에 실패했습니다.");
                return;
            }
            User user = null;

            try
            {
                user = new User(socket, gachonAccount);
            }
            catch (DuplicationError e)
            {
                NetworkMessageList.TipMessage(socket, "이 계정은 다른 클라이언트에서 접속중입니다.");
                return;
            }
            GachonSocket.Connect(socket, id, true);
            user.position = new Vector4(-69.30f, 5.33f, 47.17f, 0f);
            JObject json = new JObject();

            json["type"] = NetworkProtocol.EnterWorld;
            json["no"]   = user.no; // 플레이어를 나타내는 객체가 무엇인지 알려준다.
            socket.Send(json);
        }
示例#14
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;
                }
            }
        }
示例#15
0
 private static void Server_Connect(ESocket socket)
 {
     Console.WriteLine("로그인");
     NetworkMessageList.TipMessage(socket, "서버에 연결되었습니다.");
 }
示例#16
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);
        }
示例#17
0
        public static bool SendPost(ESocket socket, JObject message)
        {
            // 유효성 검사
            string id = GachonSocket.GetId(socket);

            if (id == null)
            {
                NetworkMessageList.TipMessage(socket, "로그인 권한을 얻을 수 없습니다. 다시 접속해주세요.");
                return(false);
            }
            string title = ((string)message["title"]).Trim();

            if (string.IsNullOrEmpty(title))
            {
                NetworkMessageList.TipMessage(socket, "우편 제목을 입력해주세요.");
                return(false);
            }
            string content = ((string)message["content"]);

            if (string.IsNullOrEmpty(content))
            {
                content = ""; // 우편 내용은 없어도 가능
            }
            string receiver = ((string)message["receiver"]);

            if (string.IsNullOrEmpty(receiver))
            {
                NetworkMessageList.TipMessage(socket, "받을 사람을 입력해주세요.");
                return(false);
            }
            string receiver_id = GachonLibrary.GachonUser.GetID(receiver);

            if (receiver_id == null)
            {
                NetworkMessageList.TipMessage(socket, "데이터베이스에서 해당 유저를 찾을 수 없습니다. (가천빌리지에 한번이라도 로그인 해야함)");
                return(false);
            }
            else if (receiver_id == "")
            {
                NetworkMessageList.TipMessage(socket, "수신자가 중복으로 존재합니다. 이름 뿐만 아니라 학번 또는 아이디 정보를 입력하여 받는 사람을 정확히 지정해주세요.");
                return(false);
            }
            if (User.Items.ContainsKey(socket)) // 게임 접속 유저일경우
            {
                User user    = User.Items[socket];
                int  file_no = -1;
                if (message["file"] != null)
                {
                    file_no = (int)message["file"];
                    if (!user.HaveItem(file_no))
                    {
                        NetworkMessageList.TipMessage(socket, "해당 파일에 대한 권한이 없습니다. 인벤토리를 확인해주세요.");
                        return(false);
                    }
                }
                SendPost(title, content, id, receiver_id, true, file_no);
                NetworkMessageList.TipMessage(socket, "우편을 성공적으로 전송하였습니다.");
                GetPage(user, 1); // 우편 리스트를 보며주는 UI로 연결
                return(true);
            }
            else // 게임 유저가 아닐경우 (안드로이드)
            {
                SendPost(title, content, id, receiver_id);
                return(true);
            }
        }