Chat: Split business logic from ChatHandler

This commit is contained in:
2015-06-02 07:45:30 +02:00
parent a34bf7e76f
commit 120d27864e
6 changed files with 95 additions and 57 deletions

View File

@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using Scrummer.Code.Entities;
namespace Scrummer.Code.BusinessLogic
{
public class MessageBoard
{
private List<Message> _messages = new List<Message>();
private int lastIDMessage = 0;
public List<Message> Messages_GetList(int idMessage)
{
List<Message> listMessages = new List<Message>();
for (int i = 0, n = _messages.Count; i < n; i++)
{
Message msg = _messages[i];
if (msg.IDMessage > idMessage)
{
listMessages.Insert(0, msg);
}
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);
}
}
}

View File

@@ -15,6 +15,8 @@ namespace Scrummer.Code.Controls
private string _userName = string.Empty;
private int _timePoolData = 10000;
private Unit _width = new Unit(500, UnitType.Pixel);
private Unit _height = new Unit(300, UnitType.Pixel);
@@ -44,6 +46,12 @@ namespace Scrummer.Code.Controls
set { _userName = value; }
}
public int TimePoolData
{
get { return _timePoolData; }
set { _timePoolData = value; }
}
public Unit Width
{
get { return _width; }
@@ -135,6 +143,7 @@ namespace Scrummer.Code.Controls
sbCfg.AppendFormat(" UserName: \"{0}\",\n", _userName);
sbCfg.AppendFormat(" IDMessage: {0},\n", 0);
sbCfg.AppendFormat(" ServiceUrl: \"{0}\",\n", _serviceUrl);
sbCfg.AppendFormat(" TimePoolData: {0},\n", _timePoolData);
sbCfg.AppendFormat(" Texts: {{\n", _serviceUrl);
sbCfg.AppendFormat(" Chat: \"{0}\",\n", "Chat");
sbCfg.AppendFormat(" Close: \"{0}\",\n", "Close X");

View File

@@ -2,58 +2,23 @@
using System.Collections.Generic;
using System.Threading;
using System.Web;
using Scrummer.Code.BusinessLogic;
using Scrummer.Code.Entities;
using Scrummer.Code.JSON;
namespace Scrummer.Code
{
public class Message
{
public int IDMessage { get; set; }
public string UserName { get; set; }
public string Text { get; set; }
public DateTime Date { get; set; }
};
public class MessageBoard
{
private List<Message> _messages = new List<Message>();
private int lastIDMessage = 0;
public List<Message> Messages_GetList(int idMessage)
{
List<Message> listMessages = new List<Message>();
for (int i = 0, n = _messages.Count; i < n; i++)
{
Message msg = _messages[i];
if (msg.IDMessage > idMessage)
{
listMessages.Insert(0, msg);
}
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);
}
}
public class ChatHandler : IHttpHandler
{
#region Declarations
private static object _monitor = new object();
private static Dictionary<int, MessageBoard> _chatBoards = new Dictionary<int, MessageBoard>();
#endregion
#region IHttpHandler
public bool IsReusable
{
get { throw new NotImplementedException(); }
@@ -71,13 +36,19 @@ namespace Scrummer.Code
}
}
#endregion
#region Private methods
private void ProcessRevicer(HttpContext context)
{
int idBoard = Convert.ToInt32(context.Request.Params["idBoard"]);
int idMessage = Convert.ToInt32(context.Request.Params["idMessage"]);
int poolData = Convert.ToInt32(context.Request.Params["PoolData"]);
int idBoard = Convert.ToInt32(GetRequestParm(context, "IDBoard"));
int idMessage = Convert.ToInt32(GetRequestParm(context, "IDMessage"));
string strTimePoolData = GetRequestParm(context, "TimePoolData");
int timePoolData = Convert.ToInt32(string.IsNullOrEmpty(strTimePoolData) ? "0" : strTimePoolData);
MessageBoard messageBoard;
bool mustWait = (poolData == 1);
bool mustWait = (timePoolData > 0);
do
{
if (_chatBoards.ContainsKey(idBoard))
@@ -93,7 +64,7 @@ namespace Scrummer.Code
}
if (mustWait)
{
lock (_monitor) { Monitor.Wait(_monitor, 10000); }
lock (_monitor) { Monitor.Wait(_monitor, timePoolData); }
}
} while (mustWait);
ResponseObject(context, new List<Message>());
@@ -101,10 +72,10 @@ namespace Scrummer.Code
private void ProcessSender(HttpContext context)
{
string strIDBoard = GetRequestParm(context, "idBoard");
string text = Convert.ToString(GetRequestParm(context, "Text"));
string strIDBoard = GetRequestParm(context, "IDBoard");
int idBoard = Convert.ToInt32(string.IsNullOrEmpty(strIDBoard) ? "0" : strIDBoard);
string userName = Convert.ToString(GetRequestParm(context, "userName"));
string text = Convert.ToString(GetRequestParm(context, "text"));
string userName = Convert.ToString(GetRequestParm(context, "UserName"));
lock (_chatBoards)
{
@@ -141,5 +112,7 @@ namespace Scrummer.Code
context.Response.ContentType = "text/json";
context.Response.Write(jsonWritter.Write(obj));
}
#endregion
}
}

View File

@@ -0,0 +1,12 @@
using System;
namespace Scrummer.Code.Entities
{
public class Message
{
public int IDMessage { get; set; }
public string UserName { get; set; }
public string Text { get; set; }
public DateTime Date { get; set; }
};
}