public void ExecuteExit(ChatPacket chatPack) { string timeNow = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); ChatRoomJoined roomJoined = BlindChatUtil.ChatPacketToStruct <ChatRoomJoined>(chatPack); SendChatPacketToParticipants(chatPack, roomJoined.RoomID); string sql = $"delete from ChatRoomJoined where UserID = {roomJoined.UserID} and RoomID = {roomJoined.RoomID};"; ExecuteQuery(sql); ChatMessage message = new ChatMessage(); message.RoomID = roomJoined.RoomID; message.UserID = 0; message.Time = timeNow; sql = $"select * from User where ID = {roomJoined.UserID}"; ChatMessage _message = new ChatMessage(); message.RoomID = roomJoined.RoomID; message.UserID = 0; message.Time = timeNow; sql = $"select * from User where ID = {roomJoined.UserID}"; MySqlDataAdapter adpt = new MySqlDataAdapter(sql, hDB); DataSet ds = new DataSet(); adpt.Fill(ds); DataRow r = ds.Tables[0].Rows[0]; User userInfo = (User)GetStructFromDB <User>(r); message.Message = $"{userInfo.Name}님이 나갔습니다."; byte[] _data = BlindNetUtil.StructToByte(message); ChatPacket _packet = BlindChatUtil.ByteToChatPacket(_data, ChatType.Message); SendChatPacketToParticipants(_packet, message.RoomID); //시간을 수정한 메시지를 DB에 등록 AddToDBTimeNow <ChatMessage>(_packet); }
public static ChatPacket ByteToChatPacket(byte[] data, ChatType type) { ChatPacket chatPack = new ChatPacket(); if (data.Length > BlindChatConst.CHATDATASIZE) { //MessageBox.Show("Data Size Must be smaller than 2048 bytes"); chatPack.Data = null; return(chatPack); } else { byte[] packData = new byte[BlindChatConst.CHATDATASIZE]; Array.Copy(data, packData, data.Length); chatPack.Type = type; chatPack.Data = packData; } return(chatPack); }
public void ClientUpdateMessage(string Time) { string sql = $"select * from ChatMessage " + $"where RoomID in (select roomID from ChatRoomJoined where userID = {UserID}) " + $"and Time > \'{Time}\' order by Time asc"; MySqlDataReader rdr = ExecuteSelect(sql); while (rdr.Read()) { ChatMessage message = (ChatMessage)GetStructFromDB <ChatMessage>(rdr); byte[] data = BlindNetUtil.StructToByte(message); ChatPacket chatPacket = BlindChatUtil.ByteToChatPacket(data, ChatType.Message); ChatPacketSend(chatPacket); } rdr.Close(); }
public void ClientUpdateChatRoom(string Time) { string sql = $"select * from ChatRoom " + $"where ID in " + $"(select RoomID from ChatRoomJoined where UserID={this.UserID}) " + $"and Time > \'{Time}\' order by Time asc"; MySqlDataReader rdr = ExecuteSelect(sql); while (rdr.Read()) { ChatRoom room = (ChatRoom)GetStructFromDB <ChatRoom>(rdr); byte[] data = BlindNetUtil.StructToByte(room); ChatPacket chatPacket = BlindChatUtil.ByteToChatPacket(data, ChatType.Room); ChatPacketSend(chatPacket); } rdr.Close(); }
public void SendChatPacketToUser(ChatPacket chatPack, int UserID) { string sql = $"select ID from User where ID = {UserID} " + $"and isOnline = true;"; MySqlDataReader rdr = ExecuteSelect(sql); while (rdr.Read()) { int userID_DB = int.Parse(rdr["ID"].ToString()); foreach (BlindChat chat in global.ListBlindChat) { if (chat.UserID == userID_DB) { chat.ChatPacketSend(chatPack); //chat.SendReset(); } } } rdr.Close(); }
public void MessageToParticipants(ChatPacket chatPack) { //메시지의 시간을 수정한다. string timeNow = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); ChatMessage message = BlindChatUtil.ChatPacketToStruct <ChatMessage>(chatPack); message.Time = timeNow; byte[] data = BlindNetUtil.StructToByte(message); ChatPacket pack = BlindChatUtil.ByteToChatPacket(data, ChatType.Message); //시간을 수정한 메시지를 DB에 등록 AddToDBTimeNow <ChatMessage>(pack); //방데이터에 최신 메시지 시간 수정 string sql = $"update ChatRoom set LastMessageTime = \'{message.Time}\' where ID = {message.RoomID}"; ExecuteQuery(sql); //방에 속한 사용자들에게 메시지 전송 SendChatPacketToParticipants(pack, message.RoomID); }
public void ClientRoomsWithRoomID <T>(int RoomID) { string sql; ChatType Type; if (typeof(T) == typeof(ChatRoom)) { sql = $"select * from ChatRoom where ID = {RoomID};"; Type = ChatType.Room; } else if (typeof(T) == typeof(ChatRoomJoined)) { sql = $"select * from ChatRoomJoined where RoomID ={RoomID}"; Type = ChatType.RoomJoined; } else { return; } //MySqlDataReader rdr = ExecuteSelect(sql); MySqlDataAdapter adpt = new MySqlDataAdapter(sql, hDB); DataSet ds = new DataSet(); adpt.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) { T st = (T)GetStructFromDB <T>(row); byte[] data = BlindNetUtil.StructToByte(st); ChatPacket chatPacket = BlindChatUtil.ByteToChatPacket(data, Type); SendChatPacketToParticipants(chatPacket, RoomID); } }
public void ExecuteInvitation(ChatPacket chatPack) { ChatRoomJoined roomJoined = BlindChatUtil.ChatPacketToStruct <ChatRoomJoined>(chatPack); //사용자 등록 string timeNow = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); string sql = $"insert into ChatRoomJoined (UserID, RoomID, Time) values ({roomJoined.UserID},{roomJoined.RoomID},\'{timeNow}\');"; ExecuteQuery(sql); //새로 추가한 사용자 검색 sql = $"select * from ChatRoomJoined where Time = \'{timeNow}\' and UserID={ roomJoined.UserID }"; MySqlDataReader rdr = ExecuteSelect(sql); byte[] data; if (rdr.Read()) { roomJoined = (ChatRoomJoined)GetStructFromDB <ChatRoomJoined>(rdr); rdr.Close(); { sql = $"select * from ChatRoom where ID = {roomJoined.RoomID}"; rdr = ExecuteSelect(sql); if (rdr.Read()) { ChatRoom room = (ChatRoom)GetStructFromDB <ChatRoom>(rdr); rdr.Close(); data = BlindNetUtil.StructToByte(room); ChatPacket chatPacket = BlindChatUtil.ByteToChatPacket(data, ChatType.Room); SendChatPacketToUser(chatPacket, roomJoined.UserID); } } //방 인원 전송 { sql = $"select * from ChatRoomJoined " + $"where RoomID = {roomJoined.RoomID} order by Time asc"; MySqlDataAdapter adptr = new MySqlDataAdapter(sql, hDB); DataSet dst = new DataSet(); adptr.Fill(dst); foreach (DataRow dr in dst.Tables[0].Rows) { ChatRoomJoined chatRoomJoined = (ChatRoomJoined)GetStructFromDB <ChatRoomJoined>(dr); if (chatRoomJoined.UserID != roomJoined.UserID) { data = BlindNetUtil.StructToByte(chatRoomJoined); ChatPacket chatPacket = BlindChatUtil.ByteToChatPacket(data, ChatType.RoomJoined); SendChatPacketToUser(chatPacket, roomJoined.UserID); } } rdr.Close(); } data = BlindNetUtil.StructToByte(roomJoined); //방 사용자들에게 전송 ChatPacket packet = BlindChatUtil.ByteToChatPacket(data, ChatType.RoomJoined); SendChatPacketToParticipants(packet, roomJoined.RoomID); ChatMessage message = new ChatMessage(); message.RoomID = roomJoined.RoomID; message.UserID = 0; message.Time = timeNow; sql = $"select * from User where ID = {roomJoined.UserID}"; MySqlDataAdapter adpt = new MySqlDataAdapter(sql, hDB); DataSet ds = new DataSet(); adpt.Fill(ds); DataRow r = ds.Tables[0].Rows[0]; User userInfo = (User)GetStructFromDB <User>(r); message.Message = $"{userInfo.Name}님이 입장하셨습니다."; byte[] _data = BlindNetUtil.StructToByte(message); ChatPacket _packet = BlindChatUtil.ByteToChatPacket(_data, ChatType.Message); SendChatPacketToParticipants(_packet, message.RoomID); //시간을 수정한 메시지를 DB에 등록 AddToDBTimeNow <ChatMessage>(_packet); Console.WriteLine("invite successed"); } else { Console.WriteLine("cant find the user"); } }