?? chatroom.cs
字號:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Threading;
namespace Cnblogs.Ajax
{
/// <summary>
/// Summary description for ChatRoom
/// </summary>
public class ChatRoom // 界面不好看,同步問題上可能會有問題,本想完全重新寫,但是最終擋不住AJAX框架的誘惑
{
private static readonly long ClearUserInterval = 300000;
private static readonly TimeSpan ExpiringInterval = new TimeSpan(0, 10, 0);
private static readonly int MessageLimit = 50;
private static ChatRoom _Instance = new ChatRoom();
public static ChatRoom Instance
{
get
{
return _Instance;
}
}
private Dictionary<string, ChattingUser> chatingUsers = null;
private LinkedList<ChatMessage> chatMessage = null;
private Timer timer = null;
private object mutex = new object();
public ChatRoom()
{
this.chatingUsers = new Dictionary<string, ChattingUser>();
this.chatMessage = new LinkedList<ChatMessage>();
TimerCallback callback = new TimerCallback(this.OnClearExpiredUser);
this.timer = new Timer(callback, null, ClearUserInterval, ClearUserInterval);
}
public bool UserIsChatting(string userName)
{
return this.chatingUsers.ContainsKey(userName);
}
public ChattingUser GetUser(string userName)
{
return this.chatingUsers[userName];
}
public void AddUser(string userName, string password)
{
lock (mutex)
{
this.chatingUsers[userName] = new ChattingUser(userName, password);
}
}
private void OnClearExpiredUser(object state)
{
lock (mutex)
{
List<ChattingUser> expiredUsers = new List<ChattingUser>();
foreach (ChattingUser user in this.chatingUsers.Values)
{
if (user.IsExpired(ExpiringInterval))
{
expiredUsers.Add(user);
}
}
foreach (ChattingUser user in expiredUsers)
{
this.chatingUsers.Remove(user.Name);
}
}
}
public void SendMessage(string userName, string message)
{
lock (mutex)
{
if (this.chatMessage.Count >= MessageLimit)
{
this.chatMessage.RemoveFirst();
}
this.chatMessage.AddLast(new ChatMessage(userName, message));
}
}
public IEnumerable<ChatMessage> GetAllMessages()
{
return this.chatMessage;
}
public IEnumerable<ChattingUser> GetAllUsers()
{
return this.chatingUsers.Values;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -