Reorder namespaces of pages and controls

This commit is contained in:
2015-06-08 07:29:29 +02:00
parent 37425c21c6
commit 8767f29e45
17 changed files with 52 additions and 67 deletions

View File

@@ -0,0 +1,12 @@
using System.Web.UI.WebControls;
namespace Scrummer.Controls
{
public class CButton : Button
{
public CButton()
{
CssClass = "button";
}
}
}

View File

@@ -0,0 +1,41 @@
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Scrummer.Controls
{
public class CLabel : Label
{
#region Declarations
private string _tagName = "span";
#endregion
#region Properties
public string Tag
{
get { return _tagName; }
set { _tagName = value; }
}
#endregion
#region Life cycle
public override void RenderBeginTag(HtmlTextWriter writer)
{
if (string.IsNullOrEmpty(_tagName) == false)
{
this.AddAttributesToRender(writer);
writer.RenderBeginTag(_tagName);
}
else
{
base.RenderBeginTag(writer);
}
}
#endregion
}
}

View File

@@ -0,0 +1,99 @@
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Scrummer.Controls
{
public class CTextBox : TextBox, IValidableControl
{
#region Declarations
private const string CssClassBase = "textbox";
private string _cssClassExtra = "";
private bool _allowEmpty = true;
private string _placeHolder = string.Empty;
private bool _markedInvalid = false;
#endregion
#region Properties
public string CssClassExtra
{
get { return _cssClassExtra; }
set { _cssClassExtra = value; }
}
public bool AllowEmpty
{
get { return _allowEmpty; }
set { _allowEmpty = value; }
}
public string PlaceHolder
{
get { return _placeHolder; }
set { _placeHolder = value; }
}
public bool MarkedInvalid
{
get { return _markedInvalid; }
set { _markedInvalid = value; }
}
#endregion
#region Control life cycle
public CTextBox()
{
PreRender += CTextbox_PreRender;
}
void CTextbox_PreRender(object sender, EventArgs e)
{
CssClass = CssClassBase;
if (string.IsNullOrEmpty(_cssClassExtra) == false)
{
CssClass = String.Format("{0} {1}", CssClassBase, _cssClassExtra);
}
if (Page.IsPostBack && (_allowEmpty == false && IsEmpty()) || _markedInvalid)
{
CssClass += " textboxInvalid";
}
Attributes.Add("onchange", "ElementRemoveClass(this, 'textboxInvalid');");
if (string.IsNullOrEmpty(_placeHolder) == false)
{
Attributes.Add("placeholder", _placeHolder);
}
// FIX: The framework deletes textbox values on password mode
if (TextMode == TextBoxMode.Password)
{
Attributes["value"] = Text;
}
}
#endregion
#region Public methods
public bool IsEmpty()
{
return string.IsNullOrEmpty(Text);
}
public bool IsValid()
{
return _allowEmpty || (string.IsNullOrEmpty(Text) == false);
}
#endregion
}
}

View File

@@ -0,0 +1,164 @@
using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Scrummer.Controls
{
public class ChatControl : Control, INamingContainer
{
#region Declarations
private string _serviceUrl = "ChatHandler";
private int _idBoard = 0;
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);
private Panel _divChatWindow = null;
private Panel _divChatContainer = null;
private Panel _divChatTitleBar = null;
#endregion
#region Properties
public string ServiceUrl
{
get { return _serviceUrl; }
set { _serviceUrl = value; }
}
public int IDBoard
{
get { return _idBoard; }
set { _idBoard = value; }
}
public string UserName
{
get { return _userName; }
set { _userName = value; }
}
public int TimePoolData
{
get { return _timePoolData; }
set { _timePoolData = value; }
}
public Unit Width
{
get { return _width; }
set
{
_width = value;
if (_divChatContainer != null)
{
_divChatContainer.Width = value;
}
}
}
public Unit Height
{
get { return _height; }
set
{
_height = value;
if (_divChatContainer != null)
{
_divChatContainer.Height = value;
}
}
}
#endregion
#region Control Life cycle
public ChatControl()
{
Init += ChatControl_Init;
}
void ChatControl_Init(object sender, EventArgs e)
{
InitializeControls();
}
#endregion
#region Private methods
private void InitializeControls()
{
string strCfgName = string.Format("{0}_cfg", this.ClientID);
_divChatWindow = new Panel { ID = "divChatWindow", CssClass = "divChatWindow" };
Controls.Add(_divChatWindow);
_divChatTitleBar = new Panel { ID = "divChatTitleBar", CssClass = "divChatTitleBar" };
_divChatWindow.Controls.Add(_divChatTitleBar);
CLabel lblTitle = new CLabel();
lblTitle.ID = "lblTitle";
_divChatTitleBar.Controls.Add(lblTitle);
_divChatContainer = new Panel { ID = "divChatContainer", CssClass = "divChatContainer" };
_divChatWindow.Controls.Add(_divChatContainer);
_divChatContainer.Width = _width;
_divChatContainer.Height = _height;
var divChat = new Panel { ID = "divChat", CssClass = "divChat" };
_divChatContainer.Controls.Add(divChat);
var divChatControls = new Panel { ID = "divChatControls", CssClass = "divChatControls" };
_divChatContainer.Controls.Add(divChatControls);
var txtText = new TextBox { ID = "txtText", CssClass = "chatTextBox" };
txtText.Attributes.Add("autocomplete", "off");
txtText.Attributes.Add("onkeydown", String.Format("if(event.keyCode==13){{SendChat({0}); return false;}}", strCfgName));
divChatControls.Controls.Add(txtText);
var btnSend = new Button { ID = "btnSend", Text = "Send", CssClass = "chatButton" };
divChatControls.Controls.Add(btnSend);
btnSend.Attributes.Add("onclick", String.Format("SendChat({0}); return false;", strCfgName));
StringBuilder sbCfg = new StringBuilder();
sbCfg.AppendFormat("<script>\n");
sbCfg.AppendFormat("var {0} = {{\n", strCfgName);
sbCfg.AppendFormat(" divChatWindow: \"{0}\",\n", _divChatWindow.ClientID);
sbCfg.AppendFormat(" divChatTitleBar: \"{0}\",\n", _divChatTitleBar.ClientID);
sbCfg.AppendFormat(" lblTitle: \"{0}\",\n", lblTitle.ClientID);
sbCfg.AppendFormat(" divChatContainer: \"{0}\",\n", _divChatContainer.ClientID);
sbCfg.AppendFormat(" divChat: \"{0}\",\n", divChat.ClientID);
sbCfg.AppendFormat(" txtText: \"{0}\",\n", txtText.ClientID);
sbCfg.AppendFormat(" btnSend: \"{0}\",\n", btnSend.ClientID);
sbCfg.AppendFormat(" IDBoard: {0},\n", _idBoard);
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");
sbCfg.AppendFormat(" NewMessages: \"{0}\",\n", "New messages");
sbCfg.AppendFormat(" Disconnected: \"{0}\",\n", "Disconnected");
sbCfg.AppendFormat(" StringEmpty: \"\"\n");
sbCfg.AppendFormat(" }}\n");
sbCfg.AppendFormat("}};\n");
sbCfg.AppendFormat("RunChat({0});\n", strCfgName);
sbCfg.AppendFormat("</script>\n");
LiteralControl liScript = new LiteralControl(sbCfg.ToString());
Controls.Add(liScript);
}
#endregion
}
}

View File

@@ -0,0 +1,138 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Web;
using Scrummer.Code.BusinessLogic;
using Scrummer.Code.Entities;
using Scrummer.Code.JSON;
namespace Scrummer.Controls
{
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(); }
}
public void ProcessRequest(HttpContext context)
{
if (context.Request.RequestType == "GET")
{
ProcessReciver(context);
}
if (context.Request.RequestType == "POST")
{
ProcessSender(context);
}
}
#endregion
#region Private methods
private void ProcessReciver(HttpContext context)
{
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 = (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];
List<Message> listMessages = messageBoard.Messages_GetList(idMessage);
if (listMessages.Count > 0)
{
mustWait = false;
ResponseObject(context, listMessages);
return;
}
}
if (mustWait)
{
lock (_monitor) { Monitor.Wait(_monitor, timePoolData); }
}
} while (mustWait);
ResponseObject(context, new List<Message>());
}
private void ProcessSender(HttpContext context)
{
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"));
Session session = Sessions.Current.Session_GetCurrent(context);
if (session.UserName.ToLower() != userName.ToLower())
{
ResponseObject(context, new OperationStatus { IsOK = false, Message = "User mismatch" });
return;
}
lock (_chatBoards)
{
MessageBoard messageBoard;
if (_chatBoards.ContainsKey(idBoard))
{
messageBoard = _chatBoards[idBoard];
}
else
{
messageBoard = new MessageBoard(idBoard);
_chatBoards[idBoard] = messageBoard;
}
messageBoard.Message_Add(userName, text);
lock (_monitor) { Monitor.PulseAll(_monitor); }
}
ResponseObject(context, new OperationStatus { IsOK = true, Message = "Message sent" });
}
private string GetRequestParm(HttpContext context, string parm)
{
foreach (string key in context.Request.Params.AllKeys)
{
if (string.IsNullOrEmpty(key) == false && key.EndsWith(parm))
{
return context.Request.Params[key];
}
}
return string.Empty;
}
private void ResponseObject(HttpContext context, object obj)
{
var jsonWritter = new JSONWriter(true);
context.Response.ContentType = "text/json";
string strObject = jsonWritter.Write(obj);
context.Response.Write(strObject);
}
#endregion
}
}

View File

@@ -0,0 +1,8 @@
namespace Scrummer.Controls
{
public interface IValidableControl
{
bool IsValid();
}
}