public void RemoveUserMessage(UserMessage userMessage) { try { _currentUserMessages.Remove(_currentUserMessages.Find(s => s.ID.Equals(userMessage.ID))); } catch (Exception ex) { throw new FaultException(ex.Message); } }
public void SubmitUserMessage(UserMessage post) { try { MessageCounter++; post.ID = MessageCounter; _currentUserMessages.Add(post); _MessagesBeingSavedToDatabase.Add(post); } catch (Exception ex) { throw new FaultException(ex.Message); } }
public List<UserMessage> GetChatFromDatabase(int roomID) { List<UserMessage> _databaseUserMessages = new List<UserMessage>(); if (_currentUserMessages.Count < 20) { var messageCountToRetrieve = 20 - _currentUserMessages.Count; var date = new DateTime(); using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ChatDatabase"].ConnectionString)) { try { connection.Open(); #region query SqlCommand cmd = new SqlCommand(@"SELECT TOP (@amount) [MessageID] ,[Message] ,[Posted] ,[Room_ID] ,[User_ID] ,[Username] FROM [dbo].[UserMessages] INNER JOIN [dbo].[Users] ON [dbo].[UserMessages].[User_ID] = [dbo].[Users].[UserID] WHERE [dbo].[UserMessages].Room_ID = @ID ORDER by MessageID desc", connection); cmd.Parameters.Add(new SqlParameter("@ID", roomID)); cmd.Parameters.Add(new SqlParameter("@amount", messageCountToRetrieve)); #endregion using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { var chat = new UserMessage(); DateTime.TryParse((string)reader["Posted"], out date); chat.ID = (int)reader["MessageID"]; chat.Submitter = (string)reader["Username"]; chat.Message = (string)reader["Message"]; chat.TimeStamp = date; _databaseUserMessages.Add(chat); } _databaseUserMessages.Reverse(); } #region CounterQuery SqlCommand msgCounterCmd = new SqlCommand("SELECT * FROM [ChatDatabase].[dbo].[UserMessages]", connection); using (SqlDataReader reader = msgCounterCmd.ExecuteReader()) { while (reader.Read()) { MessageCounter++; } } #endregion } catch (SqlException ex) { throw new FaultException($"SQL error: {ex.Message}"); } catch (Exception ex) { throw new FaultException(ex.Message); } } } else { //Limits the amount of messages a new client receives, if the current session includes more then 20 messages there is no need to query database. return _currentUserMessages.Skip(_currentUserMessages.Count - 20).Take(20).ToList(); } _currentUserMessages.Reverse(); foreach (var message in _databaseUserMessages) { _currentUserMessages.Add(message); } _currentUserMessages.Reverse(); return _currentUserMessages; }