From 651e79675b38719947b6d2df761a431e2f1863f9 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Sat, 6 Jun 2015 01:54:16 +0200 Subject: [PATCH] MessageBoard: Add persistence to chat messages. --- Scrummer/Code/BusinessLogic/MessageBoard.cs | 71 +++++++++++++++++---- Scrummer/Code/Controls/ChatHandler.cs | 14 +++- 2 files changed, 72 insertions(+), 13 deletions(-) diff --git a/Scrummer/Code/BusinessLogic/MessageBoard.cs b/Scrummer/Code/BusinessLogic/MessageBoard.cs index 783fd94..b0e16d6 100644 --- a/Scrummer/Code/BusinessLogic/MessageBoard.cs +++ b/Scrummer/Code/BusinessLogic/MessageBoard.cs @@ -6,8 +6,26 @@ namespace Scrummer.Code.BusinessLogic { public class MessageBoard { + #region Declarations + private List _messages = new List(); - private int lastIDMessage = 0; + private int _lastIDMessage = 0; + + private int _idBoard = 0; + + #endregion + + #region Life cycle + + public MessageBoard(int idBoard) + { + _idBoard = idBoard; + LoadData(); + } + + #endregion + + #region Public methods public List Messages_GetList(int idMessage) { @@ -19,24 +37,53 @@ namespace Scrummer.Code.BusinessLogic { listMessages.Insert(0, msg); } - else - { - break; - } + else { break; } } return listMessages; } public void Message_Add(string userName, string text) { - lastIDMessage++; - Message msg = new Message(); - msg.IDMessage = lastIDMessage; - msg.UserName = userName; - msg.Text = text; - msg.Date = DateTime.UtcNow; - _messages.Insert(0, msg); + lock (_messages) + { + _lastIDMessage++; + Message msg = new Message(); + msg.IDMessage = _lastIDMessage; + msg.UserName = userName; + msg.Text = text; + msg.Date = DateTime.UtcNow; + _messages.Insert(0, msg); + SaveData(); + } } + + #endregion + + #region Private methods + + #region Persistence + + private const string PersistenceFile = "priv/messageBoard.{0}.json"; + + private void LoadData() + { + _messages = Persistence.LoadList(String.Format(PersistenceFile, _idBoard)); + _lastIDMessage = 0; + if (_messages.Count > 0) + { + _lastIDMessage = _messages[0].IDMessage; + } + } + + private void SaveData() + { + Persistence.SaveList(String.Format(PersistenceFile, _idBoard), _messages); + } + + #endregion + + #endregion + } } \ No newline at end of file diff --git a/Scrummer/Code/Controls/ChatHandler.cs b/Scrummer/Code/Controls/ChatHandler.cs index a5ab063..6f5174d 100644 --- a/Scrummer/Code/Controls/ChatHandler.cs +++ b/Scrummer/Code/Controls/ChatHandler.cs @@ -51,6 +51,18 @@ namespace Scrummer.Code bool mustWait = (timePoolData > 0); do { + if (_chatBoards.ContainsKey(idBoard) == false) + { + lock (_chatBoards) + { + if (_chatBoards.ContainsKey(idBoard) == false) + { + messageBoard = new MessageBoard(idBoard); + _chatBoards[idBoard] = messageBoard; + } + } + } + if (_chatBoards.ContainsKey(idBoard)) { messageBoard = _chatBoards[idBoard]; @@ -86,7 +98,7 @@ namespace Scrummer.Code } else { - messageBoard = new MessageBoard(); + messageBoard = new MessageBoard(idBoard); _chatBoards[idBoard] = messageBoard; } messageBoard.Message_Add(userName, text);