#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
{
//定义了一个结构
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);
}
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections ;
using System.Threading ;
using System.Web;
using System.Diagnostics;namespace SohoProject
{
//定义了一个结构
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);
}
}
//如果该用户的数据当前仍然在在线列表中,则暂时先不让该用户登陆,提示用户存在
public bool AddUserToOnLine(User user)
{
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("开始进入<将当前用户加入在线列表>....");
(new SohoProject.SohoDebug()).WriteToDoc(" ");
#endif
//开始搜索是否已经存在该用户,如果存在则是改变数据,否则添加新的用户
string strExpr;
strExpr = "sessionid='" + user.sessionid + "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("搜索字符串:" + strExpr);
(new SohoProject.SohoDebug()).WriteToDoc(" ");
#endif
curUser = _alluser.Select(strExpr); #if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc(strExpr);
(new SohoProject.SohoDebug()).WriteToDoc(curUser.Length.ToString());
#endif
if (curUser.Length > 0)
{
for (int i = 0; i < curUser.Length; i++)
{
curUser[i]["curtime"] = DateTime.Now;
curUser[i]["iswhere"] = user.iswhere;
}
}
else
{
//直接加入新的数据
DataRow myRow;
try
{
myRow = _alluser.NewRow();
// Then add the new row to the collection.
myRow["name"] = user.name;
myRow["ip"] = user.ip;
myRow["iswhere"] = user.iswhere;
myRow["lasttime"] = user.lasttime;
myRow["curtime"] = DateTime.Now;
myRow["sessionid"] = user.sessionid;
_alluser.Rows.Add(myRow);
}
catch (Exception e)
{
throw (new Exception(e + "--------------------" + e.ToString()));
}
}
_alluser.AcceptChanges();
return true;
} //功能说明:判断某用户是否在线,本部分暂时不用
//返回值:TRUE代表在线,FALSE不在
public Boolean IsUserOnLine(string name)
{
//需要先判断用户是否已经在用户列表中了
//开始搜索是否已经存在该用户,如果存在则是改变数据,否则添加新的用户
string strExpr;
strExpr = "name ='" + name + "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = _alluser.Select(strExpr); if (curUser.Length > 0)
{
return true;
}
else
{
return false;
}
} //功能说明:更新用户在线时间
//返回值:最新的在线用户列表
public Boolean CheckUserOnLine(string name, string iswhere, string sessionid, string ip)
{
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("开始进入检查用户方法....");
(new SohoProject.SohoDebug()).WriteToDoc("");
#endif //需要先判断用户是否已经在用户列表中了
User newuser = new User();
newuser.name = name;
newuser.iswhere = iswhere;
newuser.lasttime = newuser.curtime = DateTime.Now;
newuser.sessionid = sessionid;
newuser.ip = ip; OnLineUser alluser = new OnLineUser();
alluser.AddUserToOnLine(newuser);
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("离开检查用户方法....");
#endif return true;
}
} //定义在线用户类
public class OnLineUser_old
{
private static ArrayList _alluser; //定义用户 public ArrayList alluser
{
get { return _alluser; }
set { _alluser = value; }
} public OnLineUser_old() //构造函数
{
if (_alluser == null)
{
_alluser = new ArrayList();
}
} //功能说明:将当前用户加入在线列表
//如果该用户的数据当前仍然在在线列表中,则暂时先不让该用户登陆,提示用户存在
public bool AddUserToOnLine(User user)
{
//需要先判断用户是否已经在用户列表中了
if (_alluser == null)
{
_alluser.Add(user);
return (true);
}
else
{
for (int i = 0; i < _alluser.Count; i++)
{
//循环判断用户是否已经存在
SohoProject.User tempuser = (SohoProject.User)_alluser[i]; if (tempuser.sessionid.Equals(user.sessionid))
{
//更新用户在线时间
tempuser.name = user.name;
tempuser.curtime = DateTime.Now;
tempuser.iswhere = user.iswhere;
tempuser.sessionid = user.sessionid;
tempuser.ip = user.ip;
alluser[i] = tempuser;
return (true);
//return(true); //用户已经存在,则直接退出
}
}
_alluser.Add(user);
return (true);
}
} //功能说明:判断某用户是否在线,本部分暂时不用
//返回值:TRUE代表在线,FALSE不在
public Boolean IsUserOnLine(string name)
{
//需要先判断用户是否已经在用户列表中了
if (_alluser == null)
{
return (false);
}
else
{
for (int i = 0; i < _alluser.Count; i++)
{
//循环判断用户是否已经存在 SohoProject.User tempuser = (SohoProject.User)_alluser[i] ;
if (tempuser.name.ToLower().Equals(name.ToLower()))
{
return (true);
}
}
return (false);
}
} //功能说明:更新用户在线时间
//返回值:最新的在线用户列表
public Boolean CheckUserOnLine(string name, string iswhere, string sessionid, string ip)
{
//需要先判断用户是否已经在用户列表中了
if (_alluser != null)
{
User newuser = new User();
newuser.name = name;
newuser.iswhere = iswhere;
newuser.lasttime = newuser.curtime = DateTime.Now;
newuser.sessionid = sessionid;
newuser.ip = ip; //OnLineUser alluser= new OnLineUser();
AddUserToOnLine(newuser);
}
return (false);
}
}
public class CheckOnline
{
const int DELAY_TIMES = 10000; //定义执行的时间间隔为5秒
const int DELAY_SECONDS = 60; //将用户掉线时间设置为30秒 private Thread thread; //定义内部线程
private static bool _flag = false; //定义唯一标志 public CheckOnline()
{
if (!_flag)
{
_flag = true;
this.thread = new Thread(new ThreadStart(ThreadProc));
thread.Name = "online user";
thread.Start();
}
}
internal void ThreadProc()
{
while (true)
{
// SohoProject.OnLineUser temp=new SohoProject.OnLineUser(); //定义一个用户对象
// for (int i=0 ;i< temp.alluser.Count;i++)
// {
// User tmpuser=(User)temp.alluser[i];
// //我是将该用户的最新时间加上30秒,然后和当前时间比较,小与当前时间,
// //则表示该用户已经吊线,则删除他的记录
// if(tmpuser.curtime.AddSeconds(DELAY_SECONDS).CompareTo(DateTime.Now)<0)
// {
// temp.alluser.RemoveAt(i);
// }
// } SohoProject.OnLineUser temp = new SohoProject.OnLineUser(); //定义一个用户对象
//开始检查是否有用户过期了
string strExpr;
//tmpuser.curtime.AddSeconds(DELAY_SECONDS).CompareTo(DateTime.Now)<0
strExpr = "curtime < '" + DateTime.Now.AddSeconds(0 - DELAY_SECONDS) + "'";
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc(strExpr);
#endif DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = temp.alluser.Select(strExpr); if (curUser.Length > 0)
{
//删除这些记录
for (int i = 0; i < curUser.Length; i++)
{
curUser[i].Delete();
}
temp.alluser.AcceptChanges();
}
Thread.Sleep(DELAY_TIMES);
}
}
}
}
using SohoProject
然后实例化类,OnLineUser User = new OnLineUser();
调用,User.方法名