⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultcs.aspx.cs

📁 Telerik是很大的第三方软件制造商
💻 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 + -