制作一个具有私聊功能的聊天室
例6.10 在聊天室中,几个网友一起聊天时,总会有一些话题不想被同一聊天室内别的聊友看见,因此聊天室必须设置私聊的功能,如图6.12所示。
|
(点击查看大图)图6.12 具有私聊功能聊天室 |
在6.3.4节中已经制作了一个简单的聊天室,在此基础上设计一个具有私聊功能的聊天室。程序实现的主要步骤:(实例位置:光盘\TM\Instances\06\ch10)
(1)在显示聊天信息页Bottom.aspx中,再添加一个TextBox控件,用来显示私聊信息;在Default.aspx中,再添加一个CheckBox控件,用来区分聊天信息为私聊还是群聊。
(2)主要程序代码如下。
为了实现私聊功能,需要修改Global.axax文件,在文件中加入如下代码。
- void Application_Start(object sender, EventArgs e)
- {
- //在应用程序启动时运行的代码
- //建立用户列表
- string user="";//用户列表
- Application["user"] = user;
- Application["userNum"] = 0;
- string chats = "";//聊天记录
- Application["chats"] = chats;
- //当前的聊天记录数
- Application["current"] = 0;
- string receive = "";//接受列表
- Application["receive"] = receive;
- string Owner = "";//发送列表
- Application["Owner"] = Owner;
- string chat = "";//私聊内容列表
- Application["chat"] = chat;
- Application["chatnum"] = 0; //私聊内容的当前记录数
- string chattime = "";//私聊信息发送时间
- Application["chattime"] = chattime;
- }
(3)进入添加聊天信息页面Bottom.aspx,当用户输入聊天信息并选中"私聊"复选框后,单击"我要发言"按钮,在"我要发言"按钮的Click事件下将发送者、接收者、发送时间、聊天内容这4项信息保存在Application对象中,其代码如下。 - protected void Button1_Click(object sender, EventArgs e)
- {
- Application.Lock( );
- string strTxt = TextBox2.Text.ToString( );
- int intintChatNum = int.Parse(Application["chatnum"].ToString ( ));
- if (CheckBox1.Checked)
- {
- //处理私聊内容
- if (intChatNum == 0 || intChatNum > 40)
- {
- intChatNum = 0;
- Application["chat"] = strTxt.ToString( );
- Application["Owner"] = Session["user"];
- Application["chattime"] = DateTime.Now;
- Application["receive"] = DropDownList1.
SelectedValue.ToString( ); - }
- else
- {
- Application["chat"] = Application["chat"]
+ "," + strTxt.ToString( ); - Application["Owner"] = Application["Owner"]
+ "," + Session["user"]; - Application["chattime"] = Application
["chattime"] + "," + DateTime.Now; - Application["receive"] = Application
["receive"] + "," + DropDownList1.SelectedValue.ToString( ); - }
- intChatNum += 1;
- object obj = intChatNum;
- Application["chatnum"] = obj;
- }
- else
- {
- //处理公共聊天内容
- int intintcurrent = int.Parse(Application
["current"].ToString( )); - if (intcurrent == 0 || intcurrent >40)
- {
- intcurrent = 0;
- Application["chats"] =Session["user"].
ToString( ) + "对" + DropDownList1.SelectedValue.ToString ( ) + "说:" + strTxt.T oString( )+"("+ DateTime.Now.ToString( )+")" ; - }
- else
- {
- Application["chats"] = Application["chats"].
ToString( ) + "," + Session["user"].ToString( ) + "对" + DropDownList 1.SelectedValue.ToString( ) + "说:" + strTxt.ToString( ) + "(" + DateTime.Now.ToString( ) + ")"; -
- }
- intcurrent +=1;
- object obj = intcurrent;
- Application["current"] = obj;
- }
- Application.UnLock( );
- //刷新聊天页面
- Response.Write("<script language=javascript>");
- Response.Write("this.parent.right.location.reload( )");
- Response.Write("</script>");
- }
(4)进入显示聊天信息页面right.aspx,当页面加载时,从Application对象中读取保存聊天信息,将所有的聊天记录显示在页面中,代码如下。 - protected void Page_Load(object sender, EventArgs e)
- {
- Application.Lock( );
- string OwnerName=Session["user"].ToString( );
- if (!IsPostBack)
- {
- //私聊、发送、接收
- string Owner = Application["Owner"].ToString( );
- string[] Ownsers = Owner.Split(',');
- string receive = Application["receive"].ToString( );
- string[] receivereceives = receive.Split(',');
- string chat=Application["chat"].ToString( );
- string [] chatchats=chat.Split(',');
- string chattime=Application["chattime"].ToString( );
- string[] chattimechattimes=chattime.Split(',');
- for (int i = (Ownsers.Length - 1); i>=0 ; i--)
- {
- if (OwnerName.Trim( ) == Ownsers[i].Trim( ))
- {
- //发送
- TextBox2TextBox2.Text = TextBox2.Text + "\n"
+ "您悄悄地对" + receives[i].ToString( ) + "说:" + chats[i]. ToString( ) + "("+chattimes[i].ToString( )+")"; - }
- else
- {
- if (OwnerName.Trim( ) == receives[i].Trim( ))
- {
- //接收
- TextBox2TextBox2.Text = TextBox2.Text +
"\n" + Ownsers[i].ToString( ) + "悄悄地对您说:" + chats[i]. ToString( ) + "(" + chattimes[i].ToString( ) + ")"; -
- }
- }
-
- }
- //公聊
- int intintcurrent = int.Parse(Application
["current"].ToString( )); - string strchat = Application["chats"].ToString( );
- string[] strchatstrchats = strchat.Split(',');
- for (int i = (strchats.Length - 1); i >= 0; i--)
- {
- if (intcurrent == 0)
- {
- TextBox1.Text =strchats[i].ToString( );
- }
- else
- {
- TextBox1TextBox1.Text = TextBox1.Text +
"\n" + strchats[i].ToString( ); - }
-
- }
-
- }
- Application.UnLock( );
- }
|