Rename to VAR.Focus

This commit is contained in:
2015-06-26 02:23:21 +02:00
parent 58d51ee3b7
commit 175fad80e4
52 changed files with 71 additions and 98 deletions

View File

@@ -0,0 +1,12 @@
using System.Web.UI.WebControls;
namespace VAR.Focus.Web.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 VAR.Focus.Web.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 VAR.Focus.Web.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,120 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace VAR.Focus.Web.Controls
{
public class CardBoardControl : Control, INamingContainer
{
#region Declarations
private string _serviceUrl = "CardBoardHandler";
private int _idBoard = 0;
private string _userName = string.Empty;
private int _timePoolData = 10000;
private int _timeRefresh = 20;
private int _timeRefreshDisconnected = 5000;
#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 int TimeRefresh
{
get { return _timeRefresh; }
set { _timeRefresh = value; }
}
public int TimeRefreshDisconnected
{
get { return _timeRefreshDisconnected; }
set { _timeRefreshDisconnected = value; }
}
#endregion
#region Control Life cycle
public CardBoardControl()
{
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);
Panel divBoard = new Panel { ID = "divBoard", CssClass = "divBoard" };
Controls.Add(divBoard);
StringBuilder sbCfg = new StringBuilder();
sbCfg.AppendFormat("<script>\n");
sbCfg.AppendFormat("var {0} = {{\n", strCfgName);
sbCfg.AppendFormat(" divBoard: \"{0}\",\n", divBoard.ClientID);
sbCfg.AppendFormat(" IDBoard: {0},\n", _idBoard);
sbCfg.AppendFormat(" UserName: \"{0}\",\n", _userName);
sbCfg.AppendFormat(" IDCardEvent: \"\",\n");
sbCfg.AppendFormat(" ServiceUrl: \"{0}\",\n", _serviceUrl);
sbCfg.AppendFormat(" TimePoolData: {0},\n", _timePoolData);
sbCfg.AppendFormat(" TimeRefresh: {0},\n", _timeRefresh);
sbCfg.AppendFormat(" TimeRefreshDisconnected: {0},\n", _timeRefreshDisconnected);
sbCfg.AppendFormat(" Texts: {{\n");
sbCfg.AppendFormat(" Toolbox: \"Toolbox\",\n");
sbCfg.AppendFormat(" AddCard: \"+ Add card\",\n");
sbCfg.AppendFormat(" Accept: \"Accept\",\n");
sbCfg.AppendFormat(" Cancel: \"Cancel\",\n");
sbCfg.AppendFormat(" ConfirmDelete: \"Are you sure to delete?\",\n");
sbCfg.AppendFormat(" StringEmpty: \"\"\n");
sbCfg.AppendFormat(" }}\n");
sbCfg.AppendFormat("}};\n");
sbCfg.AppendFormat("RunCardBoard({0});\n", strCfgName);
sbCfg.AppendFormat("</script>\n");
LiteralControl liScript = new LiteralControl(sbCfg.ToString());
Controls.Add(liScript);
}
#endregion
}
}

View File

@@ -0,0 +1,220 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Web;
using VAR.Focus.Web.Code.BusinessLogic;
using VAR.Focus.Web.Code.Entities;
using VAR.Focus.Web.Code.JSON;
namespace VAR.Focus.Web.Controls
{
public class CardBoardHandler : IHttpHandler
{
#region Declarations
private static object _monitor = new object();
private static Dictionary<int, CardBoard> _cardBoards = new Dictionary<int, CardBoard>();
#endregion
#region IHttpHandler
public bool IsReusable
{
get { throw new NotImplementedException(); }
}
public void ProcessRequest(HttpContext context)
{
try
{
if (context.Request.RequestType == "GET")
{
if (string.IsNullOrEmpty(GetRequestParm(context, "IDCardEvent")))
{
ProcessInitializationReciver(context);
}
else
{
ProcessEventReciver(context);
}
}
if (context.Request.RequestType == "POST")
{
ProcessEventSender(context);
}
}
catch (Exception ex)
{
ResponseObject(context, new OperationStatus { IsOK = false, Message = ex.Message, });
}
}
#endregion
#region Private methods
private void ProcessInitializationReciver(HttpContext context)
{
int idBoard = Convert.ToInt32(GetRequestParm(context, "IDBoard"));
CardBoard cardBoard;
if (_cardBoards.ContainsKey(idBoard) == false)
{
lock (_cardBoards)
{
if (_cardBoards.ContainsKey(idBoard) == false)
{
cardBoard = new CardBoard(idBoard);
_cardBoards[idBoard] = cardBoard;
}
}
}
if (_cardBoards.ContainsKey(idBoard))
{
cardBoard = _cardBoards[idBoard];
List<Card> listCards = cardBoard.Cards_Status();
List<ICardEvent> listEvents = new List<ICardEvent>();
int lastIDCardEvent = cardBoard.GetLastIDCardEvent();
int lastIDCard = cardBoard.GetLastIDCard();
if (listCards.Count > 0)
{
listEvents = CardBoard.ConvertCardsToEvents(listCards, lastIDCardEvent);
}
else
{
listEvents = new List<ICardEvent>();
}
ResponseObject(context, listEvents);
}
}
private CardBoard GetCardBoard(int idBoard)
{
CardBoard cardBoard = null;
if (_cardBoards.ContainsKey(idBoard) == false)
{
lock (_cardBoards)
{
if (_cardBoards.ContainsKey(idBoard) == false)
{
cardBoard = new CardBoard(idBoard);
_cardBoards[idBoard] = cardBoard;
}
}
}
cardBoard = _cardBoards[idBoard];
return cardBoard;
}
private void ProcessEventReciver(HttpContext context)
{
int idBoard = Convert.ToInt32(GetRequestParm(context, "IDBoard"));
int idCardEvent = Convert.ToInt32(GetRequestParm(context, "IDCardEvent"));
string strTimePoolData = GetRequestParm(context, "TimePoolData");
int timePoolData = Convert.ToInt32(string.IsNullOrEmpty(strTimePoolData) ? "0" : strTimePoolData);
CardBoard cardBoard = GetCardBoard(idBoard);
bool mustWait = (timePoolData > 0);
do
{
List<ICardEvent> listMessages = cardBoard.Cards_GetEventList(idCardEvent);
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 ProcessEventSender(HttpContext context)
{
Session session = Sessions.Current.Session_GetCurrent(context);
string currentUserName = session.UserName;
string strIDBoard = GetRequestParm(context, "IDBoard");
int idBoard = Convert.ToInt32(string.IsNullOrEmpty(strIDBoard) ? "0" : strIDBoard);
string command = GetRequestParm(context, "Command");
int idCard = 0;
bool done = false;
CardBoard cardBoard = GetCardBoard(idBoard);
lock (cardBoard)
{
if (command == "Create")
{
string title = GetRequestParm(context, "Title");
string body = GetRequestParm(context, "Body");
int x = Convert.ToInt32(GetRequestParm(context, "X"));
int y = Convert.ToInt32(GetRequestParm(context, "Y"));
idCard = cardBoard.Card_Create(title, body, x, y, currentUserName);
done = true;
}
if (command == "Move")
{
idCard = Convert.ToInt32(GetRequestParm(context, "IDCard"));
int x = Convert.ToInt32(GetRequestParm(context, "X"));
int y = Convert.ToInt32(GetRequestParm(context, "Y"));
cardBoard.Card_Move(idCard, x, y, currentUserName);
done = true;
}
if (command == "Edit")
{
idCard = Convert.ToInt32(GetRequestParm(context, "IDCard"));
string title = GetRequestParm(context, "Title");
string body = GetRequestParm(context, "Body");
cardBoard.Card_Edit(idCard, title, body, currentUserName);
done = true;
}
if (command == "Delete")
{
idCard = Convert.ToInt32(GetRequestParm(context, "IDCard"));
cardBoard.Card_Delete(idCard, currentUserName);
done = true;
}
}
if (done)
{
NotifyAll();
ResponseObject(context, new OperationStatus
{
IsOK = true,
Message = "Update successfully",
ReturnValue = Convert.ToString(idCard)
});
}
}
private void NotifyAll()
{
lock (_monitor) { Monitor.PulseAll(_monitor); }
}
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,164 @@
using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace VAR.Focus.Web.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 VAR.Focus.Web.Code.BusinessLogic;
using VAR.Focus.Web.Code.Entities;
using VAR.Focus.Web.Code.JSON;
namespace VAR.Focus.Web.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 VAR.Focus.Web.Controls
{
public interface IValidableControl
{
bool IsValid();
}
}