Пример #1
0
        public static void SendTakesList(ESocket socket)
        {
            string id = GachonSocket.GetId(socket);

            if (id != null)
            {
                MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM takes_course JOIN course ON takes_course.course_no=course.no WHERE student_id=?id");
                node["id"] = id;
                JArray group  = new JArray();
                JArray course = new JArray();
                using (node.ExecuteReader())
                {
                    while (node.Read())
                    {
                        if (node.GetString("type") == "Class")
                        {
                            course.Add(node.GetString("name"));
                        }
                        else if (node.GetString("type") == "Group")
                        {
                            group.Add(node.GetString("name"));
                        }
                    }
                }

                JObject json = new JObject();
                json["type"]  = AndroidProtocol.GroupList;
                json["group"] = group;
                json["class"] = course;
                socket.Send(json);
            }
        }
Пример #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;
            }
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
 private static void Server_Exit(ESocket socket)
 {
     GachonSocket.Exit(socket);
     if (User.Items.ContainsKey(socket))
     {
         User.Items[socket].Dispose();
     }
 }
Пример #5
0
 private static void Server_Exit(ESocket socket)
 {
     Console.WriteLine("누군가 종료함");
     GachonSocket.Exit(socket);
     if (User.Items.ContainsKey(socket))
     {
         User.Items[socket].Dispose();
     }
 }
Пример #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
        public static void ReturnInfo(ESocket socket)
        {
            string id = GachonSocket.GetId(socket);

            if (id != null)
            {
                JObject json = new JObject();
                json["type"]       = AndroidProtocol.Info;
                json["name"]       = GachonObjects.AllUser[id].Name;
                json["department"] = GachonObjects.AllUser[id].Department;
                json["number"]     = GachonObjects.AllUser[id].StudentNumber;
                socket.Send(json);
            }
        }
Пример #8
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);
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #9
0
        public static void SendPost(string title, string content, string sender, string receiver, bool notice = true)
        {
            DateTime  date = DateTime.Now;
            MysqlNode Node = new MysqlNode(private_data.mysqlOption, "INSERT INTO post(title, content, sender, receiver, date) VALUES (?title, ?content, ?sender, ?receiver, ?date)");

            Node["title"]    = title;
            Node["content"]  = content;
            Node["sender"]   = sender;
            Node["receiver"] = receiver;
            Node["date"]     = date.ToString("yyyy-MM-dd HH:mm:ss");
            Node.ExecuteNonQuery();

            JObject json = new JObject();

            json["type"]     = NetworkProtocol.PostAlarm;
            json["title"]    = title;
            json["content"]  = content;
            json["receiver"] = receiver;
            json["date"]     = date;
            if (notice == true)
            {
                // 받는사람이 게임 또는 스마트폰을 통해 접속중인가
                ESocket socket = GachonSocket.GetOnlineUser(receiver);
                if (socket != null)
                {
                    if (User.Items.ContainsKey(socket))
                    {
                        User.Items[socket].ToChatMessage("[우편함] 새로운 메세지가 도착했습니다.", ChatType.System);
                    }
                    else
                    {
                        socket.Send(json);
                    }
                }
                else
                {
                    AddQueue(receiver, json);
                }
            }
        }
Пример #10
0
        public static void KeywordList(ESocket socket)
        {
            string id = GachonSocket.GetId(socket);

            if (id != null)
            {
                MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM keyword WHERE student_id=?id");
                node["id"] = id;
                JArray array = new JArray();
                using (node.ExecuteReader())
                {
                    while (node.Read())
                    {
                        array.Add(node.GetString("keyword"));
                    }
                }
                JObject json = new JObject();
                json["type"] = AndroidProtocol.KeywordList;
                json["list"] = array;
                socket.Send(json);
            }
        }
Пример #11
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);
        }
Пример #12
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);
            }
        }