From d375904624bbbd5be60d3e13c81e85a25dcdef53 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Mon, 19 Mar 2018 23:29:53 +0100 Subject: [PATCH] Limit the number of loops waiting for events, on HndCardBoard and HndChat. --- VAR.Focus.Web/Controls/HndCardBoard.cs | 11 +++++++---- VAR.Focus.Web/Controls/HndChat.cs | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/VAR.Focus.Web/Controls/HndCardBoard.cs b/VAR.Focus.Web/Controls/HndCardBoard.cs index dc14d9d..0cfe6dc 100644 --- a/VAR.Focus.Web/Controls/HndCardBoard.cs +++ b/VAR.Focus.Web/Controls/HndCardBoard.cs @@ -13,6 +13,8 @@ namespace VAR.Focus.Web.Controls { #region Declarations + private const int MaxWaitLoops = 5; + private static object _monitor = new object(); private static Dictionary _cardBoards = new Dictionary(); @@ -116,22 +118,23 @@ namespace VAR.Focus.Web.Controls int timePoolData = Convert.ToInt32(string.IsNullOrEmpty(strTimePoolData) ? "0" : strTimePoolData); CardBoard cardBoard = GetCardBoard(idBoard); - bool mustWait = (timePoolData > 0); + int waitCount = (timePoolData > 0) ? MaxWaitLoops : 0; do { List listMessages = cardBoard.Cards_GetEventList(idCardEvent); if (listMessages.Count > 0) { - mustWait = false; + waitCount = 0; context.ResponseObject(listMessages); return; } - if (mustWait) + if (waitCount > 0) { lock (_monitor) { Monitor.Wait(_monitor, timePoolData); } + waitCount--; } - } while (mustWait); + } while (waitCount > 0); context.ResponseObject(new List()); } diff --git a/VAR.Focus.Web/Controls/HndChat.cs b/VAR.Focus.Web/Controls/HndChat.cs index 5a2c6d5..ed078f4 100644 --- a/VAR.Focus.Web/Controls/HndChat.cs +++ b/VAR.Focus.Web/Controls/HndChat.cs @@ -13,6 +13,8 @@ namespace VAR.Focus.Web.Controls { #region Declarations + private const int MaxWaitLoops = 5; + private static object _monitor = new object(); private static Dictionary _chatBoards = new Dictionary(); @@ -56,7 +58,7 @@ namespace VAR.Focus.Web.Controls int timePoolData = Convert.ToInt32(string.IsNullOrEmpty(strTimePoolData) ? "0" : strTimePoolData); MessageBoard messageBoard; - bool mustWait = (timePoolData > 0); + int waitCount = (timePoolData > 0) ? MaxWaitLoops : 0; do { if (_chatBoards.ContainsKey(idMessageBoard) == false) @@ -77,16 +79,17 @@ namespace VAR.Focus.Web.Controls List listMessages = messageBoard.Messages_GetList(idMessage); if (listMessages.Count > 0) { - mustWait = false; + waitCount = 0; context.ResponseObject(listMessages); return; } } - if (mustWait) + if (waitCount > 0) { lock (_monitor) { Monitor.Wait(_monitor, timePoolData); } + waitCount--; } - } while (mustWait); + } while (waitCount > 0); context.ResponseObject(new List()); }