Ejemplo n.º 1
0
        //Метод отправки сообщений
        private void Sending_Message()
        {
            //Чтобы не отправлялись пустые сообщения
            if (TextBox_Message.Text.Length != 0)
            {
                try
                {
                    //Открываем соединение
                    connection.Open();

                    //Строка запроса для БД (недописана)
                    string sql_cmd = "INSERT INTO server_chats.messages (Text_Message, Date_Message, ID_Sender, ID_Reciever, Visible_Message) VALUES (@TEXT, NOW(), @MYID, @FRIENDID, 0);";

                    //Команда запроса
                    MySqlCommand cmd = connection.CreateCommand();
                    cmd.CommandText = sql_cmd;

                    //Добавляем параметры
                    MySqlParameter text_message = new MySqlParameter("@TEXT", MySqlDbType.Text);
                    text_message.Value = TextBox_Message.Text;
                    cmd.Parameters.Add(text_message);

                    MySqlParameter myID = new MySqlParameter("@MYID", MySqlDbType.Int32);
                    myID.Value = IDuser;
                    cmd.Parameters.Add(myID);

                    MySqlParameter friendID = new MySqlParameter("@FRIENDID", MySqlDbType.Int32);
                    friendID.Value = IDFriend;
                    cmd.Parameters.Add(friendID);

                    //Выполняем запрос
                    cmd.ExecuteNonQuery();

                    //Добавляем сообщение в диалог
                    //Нет возможности добавить ID для своего сообщения, т.к. его формирует БД
                    //Отправленное сообщение возможно не получится удалить, пока не перезайти в диалог
                    Message my_message = new Message();
                    my_message.Message_ID   = -1;
                    my_message.Message_Text = TextBox_Message.Text;
                    my_message.Message_Date = DateTime.Now.ToString();
                    my_message.backGround   = (Brush)Application.Current.Resources["MyMessageColor"];
                    my_message.borderBrush  = (Brush)Application.Current.Resources["MyMessageColor"];
                    Message_List.Items.Add(my_message);
                    Message_List.ScrollIntoView(Message_List.Items[Message_List.Items.Count - 1]);
                    TextBox_Message.Text = "";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    //Закрываем соединение
                    connection.Close();
                }
            }
        }
Ejemplo n.º 2
0
        //Удаление сообщения из диалога
        private void DeleteMessage_Click(object sender, RoutedEventArgs e)
        {
            //Кнопка удаления сообщения, хранящее ID удаляемого сообщения
            Button message = sender as Button;

            try
            {
                //Открываем соединение
                connection.Open();

                //Строка запроса
                string sql_cmd = "DELETE FROM server_chats.messages WHERE ID = @IDMESSAGE;";

                //Команда запроса
                MySqlCommand cmd = connection.CreateCommand();
                cmd.CommandText = sql_cmd;

                //Добавляем параметры
                MySqlParameter messageID = new MySqlParameter("@IDMESSAGE", MySqlDbType.Int32);
                messageID.Value = message.Content.ToString();
                cmd.Parameters.Add(messageID);

                //Выполняем запрос
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                //Закрываем соединение
                connection.Close();
                //Вызываем функцию загрузки сообщений
                Message_List.Items.Clear();
                if (MessageCount <= 1000)
                {
                    Loading_Messages("SELECT * FROM server_chats.messages WHERE (ID_Sender = @MYID AND ID_Reciever = @IDFRIEND) OR (ID_Sender = @IDFRIEND AND ID_Reciever = @MYID)");
                }
                else
                {
                    Loading_Messages("SELECT * FROM server_chats.messages WHERE (ID_Sender = @MYID AND ID_Reciever = @IDFRIEND) OR (ID_Sender = @IDFRIEND AND ID_Reciever = @MYID) LIMIT @COUNT-1000,@COUNT;");
                }
                Message_List.ScrollIntoView(Message_List.Items[Message_List.Items.Count - 1]);
            }
        }
Ejemplo n.º 3
0
        //Запуск асинхронной операции обновления текущего диалога
        public async void Refresh_Chat_Async()
        {
            while (IDFriend != -1)
            {
                //Проверка на наличие непрочитанных сообщений
                bool unreadMessage = false;
                try
                {
                    //Открываем соединение
                    await connection_async.OpenAsync();

                    //Строка запроса
                    string sql_cmd = "SELECT * FROM server_chats.messages WHERE (ID_Reciever = @MYID AND ID_Sender = @FRIENDID AND Visible_Message = 0);";

                    //Команда запроса
                    MySqlCommand cmd = connection_async.CreateCommand();
                    cmd.CommandText = sql_cmd;

                    //Добавляем параметры запроса
                    MySqlParameter myID = new MySqlParameter("@MYID", MySqlDbType.Int32);
                    myID.Value = IDuser;
                    cmd.Parameters.Add(myID);

                    MySqlParameter friendID = new MySqlParameter("@FRIENDID", MySqlDbType.Int32);
                    friendID.Value = IDFriend;
                    cmd.Parameters.Add(friendID);

                    //Проверяем в БД непрочитанные нами сообщения
                    using (DbDataReader reader = await cmd.ExecuteReaderAsync())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Message friend_message = new Message();
                                friend_message.Message_ID   = int.Parse(reader.GetString(0));
                                friend_message.Message_Text = reader.GetString(1);
                                friend_message.Message_Date = reader.GetString(2);
                                friend_message.backGround   = (Brush)Application.Current.Resources["FriendMessageColor"];
                                friend_message.borderBrush  = (Brush)Application.Current.Resources["FriendMessageColor"];
                                //Выполняет указанный делегат в оснвном потоке (т.к. к Control'у я не могу обратиться из этого потока)
                                Dispatcher.Invoke(() => Message_List.Items.Add(friend_message));
                                //Если непрочитанные сообщения есть, то нужно отметить их прочитанными
                                unreadMessage = true;
                            }
                            Dispatcher.Invoke(() => Message_List.ScrollIntoView(Message_List.Items[Message_List.Items.Count - 1]));
                        }
                    }
                    //В зависимости от того, есть ли сообщения непрочитанные
                    //Выполняем функцию отметки сообщений
                    if (unreadMessage)
                    {
                        Mark_Read();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    //Закрываем соединение
                    await connection_async.CloseAsync();
                }

                //Приостанавливаем поток данной функции (снижает нагрузку на БД, ОЗУ, ЦП + 1,5 сек. не страшная задержка)
                System.Threading.Thread.Sleep(1500);
            }
        }