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); } }
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; } }
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); } } }
private static void Server_Exit(ESocket socket) { GachonSocket.Exit(socket); if (User.Items.ContainsKey(socket)) { User.Items[socket].Dispose(); } }
private static void Server_Exit(ESocket socket) { Console.WriteLine("누군가 종료함"); GachonSocket.Exit(socket); if (User.Items.ContainsKey(socket)) { User.Items[socket].Dispose(); } }
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); }
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); } }
/// <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); } } } } } } }
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); } } }
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); } }
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); }
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); } }