//online.cs(用戶在線檢測(cè))
/*程序?qū)崿F(xiàn)思路:
該用戶有以下幾個(gè)屬性:
name:用戶名
sessionID:用戶ID,通過(guò)它唯一表示一個(gè)用戶
iswhere :附加信息,用戶當(dāng)前所在位置
lasttime:用戶登陸時(shí)間
curtime:本次刷新時(shí)間
在客戶端,使用一個(gè)IFRAME,裝載一個(gè)刷新頁(yè)面,每隔XX秒更新一下他的名字對(duì)應(yīng)的curtime,就表示他仍然在
在服務(wù)器端,建立一個(gè)守護(hù)線程,每隔固定時(shí)間就運(yùn)行一遍,然后判斷當(dāng)前所有用戶列表中的時(shí)間間隔是否超出了規(guī)定的時(shí)間,如果超出,則將該用戶從在線列表中刪除,這樣就可以做到檢測(cè)用戶是否在線了,而如果再單獨(dú)
寫(xiě)個(gè)用戶離線后的處理,就可以解決好多人問(wèn)到的:用戶意外吊線后的處理。
*/
#define DEBUG
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections ;
using System.Threading ;
using System.Web;
using System.Diagnostics;
namespace SohoProject
{
//定義了一個(gè)結(jié)構(gòu)
public struct User
{
public string name;
public DateTime lasttime;
public DateTime curtime;
public string sessionid;
public string ip;
public string iswhere;
}
public class OnLineUser
{
private static DataTable _alluser;
//只讀屬性
public DataTable alluser{
get{return _alluser;}
}
public OnLineUser()
{
if(_alluser==null)
{
//define user list
// Declare variables for DataColumn and DataRow objects.
_alluser = new DataTable("onlineuser");
DataColumn myDataColumn;
// Create new DataColumn, set DataType, ColumnName and add to DataTable.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "name";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "name";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn);
// Create sessionid column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "sessionid";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "sessionid";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = true;
_alluser.Columns.Add(myDataColumn);
// Create ip column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "ip";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "ip";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn);
// Create iswhere column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "iswhere";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "iswhere";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn);
// Create iswhere column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.DateTime");
myDataColumn.ColumnName = "lasttime";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "lasttime";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn);
// Create iswhere column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.DateTime");
myDataColumn.ColumnName = "curtime";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "curtime";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn);
}
}
//功能說(shuō)明:將當(dāng)前用戶加入在線列表
//如果該用戶的數(shù)據(jù)當(dāng)前仍然在在線列表中,則暫時(shí)先不讓該用戶登陸,提示用戶存在
public bool AddUserToOnLine(User user)
{
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("開(kāi)始進(jìn)入<將當(dāng)前用戶加入在線列表>....");
(new SohoProject.SohoDebug()).WriteToDoc("\r\n");
#endif