程序实现以下几个基本功能
1、可以显示在线人员,并既时的反映人员的在线情况,上下线比较迅速的反映出来。
2、可以在不同分组里选择人员发送信息
3、可以消息群发
4、发送的消息要既时的让对放收到。
刚开始做的时候认为功能不对,因该很容易实现,但是实际做的时候才发现在WEB上实现类似功能没有想的那么简单。
首先是人员在线问题,我的想法是弄一个在线人员表来记录在线人员情况,当有人上线的时候时候就插入信息,下线的时候就删除信息。分组信息(既部门信息)以及人员信息都从现有系统的的表里读取,取取的时候取在线人员表,如果该人在显线则代表人员的图片为亮色,并把顺序提前,否则则为灰色。如下图:
遇到的一个问题是如何既时的获取人员的在线情况,我的方法是用JAVASCRIPT里面的setInterval方法来动态的加载一个JS文件,JS文件是由程页面生成的,他用来判断用户登录时的在线人员表是否和数据库里目前的表内容一致,如果不一致则当前也面重新加载。
1
<
script language
=
javascript
>
2 <!--
3 function cc()
4 {
5 document.all.check.src = " checkout2.aspx " ;
6
7 }
8 setInterval( " cc() " , 5000 );
9
10 // -->
11 </ script >
2 <!--
3 function cc()
4 {
5 document.all.check.src = " checkout2.aspx " ;
6
7 }
8 setInterval( " cc() " , 5000 );
9
10 // -->
11 </ script >
CHECKOUT2。ASPX中判断是否重新加载页面
1
DataTable dtt
=
(DataTable)Session[
"
online
"
];
2 if (dt.Rows.Count == dtt.Rows.Count)
3 {
4 foreach(DataRow r in dt.Rows)
5 {
6 if(dtt.Select("userid="+r["userid"].ToString()).Length<1)
7 {
8 //Response.Write("<script language=javascript></script>");
9 Response.Write("parent.main.location.href='qqmain.aspx';");
10 Session["online"]=dt;
11 return;
12 }
13 }
2 if (dt.Rows.Count == dtt.Rows.Count)
3 {
4 foreach(DataRow r in dt.Rows)
5 {
6 if(dtt.Select("userid="+r["userid"].ToString()).Length<1)
7 {
8 //Response.Write("<script language=javascript></script>");
9 Response.Write("parent.main.location.href='qqmain.aspx';");
10 Session["online"]=dt;
11 return;
12 }
13 }
1
<
script language
=
"
javascript
"
>
2 <!--
3
4 function logout()
5 {
6
7
8 var xmlhttp = new ActiveXObject( " MSXML2.XMLHTTP " );
9 xmlhttp.open( " post " , " out.aspx " , false );
10 xmlhttp.send( "" );
11
12
13 }
14 // -->
15 </ script >
2 <!--
3
4 function logout()
5 {
6
7
8 var xmlhttp = new ActiveXObject( " MSXML2.XMLHTTP " );
9 xmlhttp.open( " post " , " out.aspx " , false );
10 xmlhttp.send( "" );
11
12
13 }
14 // -->
15 </ script >
1
string
sql
=
"
delete from user_online where userid='
"
+
this
._UserID
+
"
'
"
;
2 Data.EditData(sql);
2 Data.EditData(sql);