关于WEBQQ的实现(二)
上次写了WEBQQ的在线人员的实现,一直都没有时间写后面的。今天抽空上来爬爬格子(经常写代码语言能力变差了,汗)。上一次说了如何实现人员的在线和上下线的问题,今天主要谈谈消息发送和接收的实现实现。其实这个实现需要基于上次的基础。前一次谈了如何定期检查数据库在线人员的情况,同样的道理,在检查在线人员的时候可以检查数据库的消息表,我写了一个方法用来检查数据库中属于当前用户的未读消息。
当检查到符合条件的记录时就用JAVASCRIPT打开一个消息窗口弹出消息。
检查到了消息以后接着要在消息窗口中显示未读消息。发送消息和接受消息都用的一个窗口根据不同参数来判断是否读取数据库数据(分两中状态,一种是选择要发送的对象直接打开的窗口,一种是根据上面方法检查到有信息而自动弹出的窗口),在这里我写了一个属性
下面是根据该属性来判断是否读取数据库消息的方法,下面方法从数据库读取了相关信息,并把他们的状态都从未读改为已读,这样读过的信息下次就不会再显示出来。
最后是发送消息的代码,这个比较简单,只是向数据库插入一条记录然后关闭当前窗口
这样一个WEBQQ的基本功能就实现了,代码并不复杂,关键是想说明我做这个东西的思想方法。也许我的想法和功能都很简单,但是有很多东西通过自己想法实现的都比较有意思,有做类似东西的朋友也可以多多交流,希望能给我更多的想法和思路:)
1private void checkMessage()
2 {
3 string Sql="select distinct sender from message where state=1 and recrieve='"+this._UserID+"'";
4 DataTable msgtb=Data.DataSetQuery(Sql,"msg").Tables[0];
5 foreach(DataRow r in msgtb.Rows)
6 {
7 string username=r["sender"].ToString();
8
9string script="window.open('message.aspx?sender="+username+"&type=0','"+username+"','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,top=2,width=400,height=400');";
10 Response.Write(script);
11
12 }
13
14 }
2 {
3 string Sql="select distinct sender from message where state=1 and recrieve='"+this._UserID+"'";
4 DataTable msgtb=Data.DataSetQuery(Sql,"msg").Tables[0];
5 foreach(DataRow r in msgtb.Rows)
6 {
7 string username=r["sender"].ToString();
8
9string script="window.open('message.aspx?sender="+username+"&type=0','"+username+"','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,top=2,width=400,height=400');";
10 Response.Write(script);
11
12 }
13
14 }
检查到了消息以后接着要在消息窗口中显示未读消息。发送消息和接受消息都用的一个窗口根据不同参数来判断是否读取数据库数据(分两中状态,一种是选择要发送的对象直接打开的窗口,一种是根据上面方法检查到有信息而自动弹出的窗口),在这里我写了一个属性
1private string Type
2 {
3 get{return Request.QueryString["type"].ToString();}
4
5 }
2 {
3 get{return Request.QueryString["type"].ToString();}
4
5 }
1private void checkMsg()
2 {
3 if (Type.Equals("0")) {
4 string sql="select *,b.username from message a,user_info b where b.userid=a.sender and a.state=1 and a.sender='"+sendName+"' and recrieve='"+this._UserID+"'";
5 DataTable dt=Data.DataSetQuery(sql,"msg").Tables[0];
6
7 this.BindBaseList(DataList1,dt);
8 sql="update message set state=0 where state=1 and sender='"+sendName+"' and recrieve='"+this._UserID+"'";
9 Data.EditData(sql);
10
11 }
12 }
2 {
3 if (Type.Equals("0")) {
4 string sql="select *,b.username from message a,user_info b where b.userid=a.sender and a.state=1 and a.sender='"+sendName+"' and recrieve='"+this._UserID+"'";
5 DataTable dt=Data.DataSetQuery(sql,"msg").Tables[0];
6
7 this.BindBaseList(DataList1,dt);
8 sql="update message set state=0 where state=1 and sender='"+sendName+"' and recrieve='"+this._UserID+"'";
9 Data.EditData(sql);
10
11 }
12 }
1string sql=@"insert into message(sender,recrieve,message,creattime)
2values('"+this._UserID+"','"+sendName+"','"+tb_concent.Text+"',getdate())";
3 Data.EditData(sql);
4 this.Response_Page("消息发送成功。","debug");
5 Response.Write("<script language=javascript>window.close();</script>");
6 this.tb_concent.Text="";
2values('"+this._UserID+"','"+sendName+"','"+tb_concent.Text+"',getdate())";
3 Data.EditData(sql);
4 this.Response_Page("消息发送成功。","debug");
5 Response.Write("<script language=javascript>window.close();</script>");
6 this.tb_concent.Text="";
这样一个WEBQQ的基本功能就实现了,代码并不复杂,关键是想说明我做这个东西的思想方法。也许我的想法和功能都很简单,但是有很多东西通过自己想法实现的都比较有意思,有做类似东西的朋友也可以多多交流,希望能给我更多的想法和思路:)