コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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");
            }
        }