e.name = name;
BroadcastMessage(e);
ChatEvent += myEventHandler;
string[] list = new string[chatters.Count]; //以下代码返回当前进入聊天室成员的称列表
lock (syncObj)
{
chatters.Keys.CopyTo(list, 0);//将字典中记录的用户信息复制到数组中返回。
}
return list;
}
else
{
return null;
}
}
public void Say(string msg)
{
ChatEventArgs e = new ChatEventArgs();
e.msgType = MessageType.Receive;
e.name = this.name;
e.message = msg;
BroadcastMessage(e);
}
public void Whisper(string to, string msg)
{
ChatEventArgs e = new ChatEventArgs();
e.msgType = MessageType.ReceiveWhisper;
e.name = this.name;
e.message = msg;
try
{
ChatEventHandler chatterTo;//创建一个临时委托实例
lock (syncObj)
{
chatterTo = chatters[to]; //查找成员字典中,找到要接收者的委托调用
}
chatterTo.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);//异步方式调用接收者的委托调用
}
catch (KeyNotFoundException)
{
}
}
public void Leave()
{
if (this.name == null)
return;
lock (syncObj)
{
chatters.Remove(this.name);
}
ChatEvent -= myEventHandler;
ChatEventArgs e = new ChatEventArgs();
e.msgType = MessageType.UserLeave;
e.name = this.name;
this.name = null;
BroadcastMessage(e);
}
//回调,根据客户端动作通知对应客户端执行对应的操作
private void MyEventHandler(object sender, ChatEventArgs e)
{
try
{
switch (e.msgType)