📄 defaultcs.aspx.cs
字号:
using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.QuickStart;
using Telerik.WebControls;
namespace Telerik.CallbackExamplesCSharp.Demos.Chat
{
/// <summary>
/// Summary description for _Default.
/// </summary>
public class DefaultCS: XhtmlPage
{
protected Panel userNamePanel;
protected Panel chatRoomPanel;
protected Label chatBox;
protected Label message;
protected TextBox messageBox;
protected TextBox userName;
protected TextBox userNameHolder;
protected ListBox usersList;
protected CallbackButton sendButton;
protected CallbackButton enterButton;
protected Panel staticPanel;
protected Label Label1;
protected Telerik.WebControls.LoadingPanel LoadingPanel1;
protected System.Web.UI.HtmlControls.HtmlImage Img1;
protected CallbackTimer timer1;
private void Page_Load(object sender, EventArgs e)
{
sendButton.ClientEvents.OnResponseEnd = string.Format("SetFocus");
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.enterButton.Click += new System.EventHandler(this.enterButton_Click);
this.sendButton.Click += new System.EventHandler(this.sendButton_Click);
this.timer1.Tick += new Telerik.WebControls.CallbackTimer.TickEvent(this.CallbackTimer1_Tick);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void enterButton_Click(object sender, EventArgs e)
{
if ((userName.Text.Trim() == string.Empty) ||
CheckUserName(userName.Text))
{
message.Text = "Please, provide another username!<br>";
return;
}
userNamePanel.Style["display"] = "none";
chatRoomPanel.Style["display"] = "block";
ArrayList users = null;
if (Application["UsersListCS"] == null)
{
users = new ArrayList();
Application.Add("UsersListCS", users);
}
else
{
users = (ArrayList) Application["UsersListCS"];
}
userNameHolder.Text = Guid.NewGuid().ToString();
Session.Add(userNameHolder.Text, userName.Text);
users.Add(new ChatUser(userName.Text));
timer1.Start();
PopulateUsers(users);
foreach (Control ctrl in staticPanel.Controls)
{
if (ctrl is WebControl)
{
((WebControl) ctrl).Visible = true;
}
else if (ctrl is CallbackButton)
{
((CallbackButton) ctrl).Visible = true;
}
}
}
private void sendButton_Click(object sender, EventArgs e)
{
chatBox.Text += string.Format("<span style=\"color:blue\"><b>{0}:</b> {1}</span><br>", (string) Session[userNameHolder.Text], messageBox.Text);
ArrayList messages = null;
if (Application["MessagesCS"] == null)
{
messages = new ArrayList();
Application.Add("MessagesCS", messages);
}
else
{
messages = (ArrayList) Application["MessagesCS"];
}
messages.Add(new ChatMessage(messageBox.Text, (string) Session[userNameHolder.Text]));
messageBox.Text = string.Empty;
sendButton.ResponseScript = string.Format("var mb = document.getElementById('{0}'); mb.value=''; mb.focus();", this.messageBox.ClientID);
}
private void CallbackTimer1_Tick(object sender, EventArgs args)
{
ArrayList users = (ArrayList) Application["UsersListCS"];
UpdateCurrentUser(users);
if (Application["MessagesCS"] != null)
{
ArrayList messages = (ArrayList) Application["MessagesCS"];
for (int i=0; i<messages.Count; i++)
{
ChatMessage message = (ChatMessage) messages[i];
if (!message.IsReadByUser((string) Session[userNameHolder.Text]))
{
chatBox.Text += string.Format("<span style=\"color:blue\"><b>{0}:</b> {1}</span><br>", message.Author, message.MessageText);
message.ReadByUsers.Add((string) Session[userNameHolder.Text]);
}
if (message.ReadByUsers.Count == users.Count)
{
messages.Remove(message);
}
}
}
CheckIdleUsers(users);
CheckUsers(users);
}
#region Private Helper Methods
private bool CheckUserName(string userName)
{
if (Application["UsersListCS"] == null)
{
return false;
}
ArrayList users = (ArrayList) Application["UsersListCS"];
if (ChatUser.GetByUserName(users, userName) == null)
{
return false;
}
return true;
}
private void UpdateCurrentUser(ArrayList users)
{
ChatUser currentUser = ChatUser.GetByUserName(users, (string) Session[userNameHolder.Text]);
currentUser.LastAction = DateTime.Now;
}
private void PopulateUsers(ArrayList users)
{
for (int i=0; i<users.Count; i++)
{
ChatUser user = (ChatUser) users[i];
usersList.Items.Add(new ListItem(user.UserName, user.UserName));
}
}
private void RemoveUser(ArrayList users, ChatUser user)
{
chatBox.Text += string.Format("<span style=\"color:red\">User \"{0}\" left the room.</span><br>", user.UserName);
usersList.Items.Remove(usersList.Items.FindByValue(user.UserName));
users.Remove(user);
}
private void CheckUsers(ArrayList users)
{
for (int i=0; i<users.Count; i++)
{
ChatUser user = (ChatUser) users[i];
ListItem userItem = usersList.Items.FindByValue(user.UserName);
if (userItem == null)
{
usersList.Items.Add(new ListItem(user.UserName, user.UserName));
chatBox.Text += string.Format("<span style=\"color:red\">User \"{0}\" joined the room.</span><br>", user.UserName);
}
}
for (int i=0; i<usersList.Items.Count; i++)
{
ListItem item = usersList.Items[i];
if (ChatUser.GetByUserName(users, item.Value) == null)
{
chatBox.Text += string.Format("<span style=\"color:red\">User \"{0}\" left the room.</span><br>", item.Value);
usersList.Items.Remove(item);
}
}
}
private void CheckIdleUsers(ArrayList users)
{
for (int i=0; i<users.Count; i++)
{
ChatUser user = (ChatUser) users[i];
TimeSpan span = DateTime.Now - user.LastAction;
if (span.Seconds > 5 * 60)
{
if (span.Seconds > 10 * 60)
{
RemoveUser(users, user);
continue;
}
ListItem item = usersList.Items.FindByValue(user.UserName);
item.Text = user.UserName + " (idle)";
}
else
{
ListItem item = usersList.Items.FindByValue(user.UserName);
if ((item != null) && (item.Text.EndsWith(" (idle)")))
{
item.Text = item.Text.Substring(0, item.Text.Length - " (idle)".Length);
}
}
}
}
#endregion
}
#region Chat Classes
public class ChatUser
{
public string UserName = string.Empty;
public DateTime LastAction = DateTime.Now;
public ChatUser(string userName)
{
UserName = userName;
LastAction = DateTime.Now;
}
public static ChatUser GetByUserName(ArrayList users, string userName)
{
for (int i=0; i<users.Count; i++)
{
ChatUser user = (ChatUser) users[i];
if (user.UserName == userName)
{
return user;
}
}
return null;
}
}
public class ChatMessage
{
public string MessageText = string.Empty;
public string Author = string.Empty;
public ArrayList ReadByUsers = null;
public ChatMessage(string messageText, string userName)
{
MessageText = messageText;
Author = userName;
ReadByUsers = new ArrayList();
ReadByUsers.Add(userName);
}
public bool IsReadByUser(string userName)
{
for (int i=0; i<ReadByUsers.Count; i++)
{
string user = (string) ReadByUsers[i];
if (user == userName)
{
return true;
}
}
return false;
}
}
#endregion
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -