以下は私のクラスファイルです。
//online.cs(ユーザーオンライン検出)
/*プログラムの実装アイデア:
ユーザーには次の属性があります。
名前:ユーザー名
SESSIONID:ユーザーID、唯一のユーザーにそれを通して表示されます
どこにいても、ユーザーが現在配置されている追加情報
最後に:ユーザーログイン時間
Curtime:今回は更新されます
クライアントでは、iframeを使用して更新ページを読み込み、xx秒ごとに彼の名前に対応するカータイムを更新すると、彼はまだ存在していることを意味します
サーバー側では、ガーディアンスレッドを構築し、固定時間ごとに1回実行し、現在のすべてのユーザーリストの時間間隔を超えているかどうかを判断します。
指定された時間を超えた場合、ユーザーはオンラインリストから削除され、ユーザーがオンラインであるかどうか、および単独であるかどうかを検出できます。
ユーザーのオフライン処理を記述して、多くの人が尋ねる多くの人を解決します。誤ってラインを掛けた後のユーザーの扱い。
*/
#define_debug
名前空間Soholife
{{
システムの使用。
System.Dataを使用しています。
System.data.sqlclientを使用しています。
System.Collectionsを使用します。
System.Threadingを使用しています。
system.webを使用しています。
System.Dianosticsを使用します。
//構造を定義します
パブリックストラクチャユーザー
{{
パブリック文字列名;
パブリックデートタイムラストタイム。
パブリックデートタイムカータイム;
public string sessionid;
パブリック文字列はどこにありますか。
}
//オンラインユーザークラスを定義します
パブリッククラスオンラインユーザー
{{
プライベートStatic ArrayList_Alluser; //定義します
Public ArrayList Alluser
{{
geturn_alluser;}
set {_alluser = value;}
}
public OnlineUser()//コンストラクト関数
{{
if(_allurs == null)
{{
_alluser = new ArrayList();
}
}
//機能説明:現在のユーザーをオンラインリストに追加します
//ユーザーのデータがまだオンラインリストにある場合、ユーザーにログインすることは一時的に許可されておらず、ユーザーに存在するように促します
public booladdusertoonline(ユーザーユーザー)
{{
//ユーザーがすでにユーザーリストにあるかどうかを判断する必要があります
if(_allurs == null)
{{
_alluser.add(user);
return(true);
}
それ以外
{{
for(int i = 0; i <_alluser.count; i ++)
{{
//ユーザーが既に存在するかどうかのサイクル判断
soholife.user tester =(soholife.user)_alluser [i];
if(tempuser.sessionid.equals(user.sessionid)&& tempuser.name.equals(user.name)))
{{
return(false); //ユーザーが存在し、直接終了します
}
}
_alluser.add(user);
return(true);
}
}
//関数説明:ユーザーがオンラインであるかどうかを判断してください、この部分は当面は使用されません
//戻り値:trueはオンラインで表現します、falseはそこにありません
publicboolean isauseronline(string name)
{{
//ユーザーがすでにユーザーリストにあるかどうかを判断する必要があります
if(_allurs == null)
{{
return(false);
}
それ以外
{{
for(int i = 0; i <_alluser.count; i ++)
{{
//ユーザーが既に存在するかどうかのサイクル判断
soholife.user tester =(soholife.user)_alluser [i];
if(tester.name.equals(name))
{{
return(true);
}
}
return(false);
}
}
//関数説明:ユーザーのオンライン時間を更新します
//返品値:最新のオンラインユーザーリスト
public boolean checkuseronline(文字列名)
{{
//ユーザーがすでにユーザーリストにあるかどうかを判断する必要があります
if(_alluser!= null)
{{
for(int i = 0; i <_alluser.count; i ++)
{{
soholife.usertempuser =(soholife.user)_alluser [i];
//最初に現在のユーザーが自分であるかどうかを判断します
if(tester.name.equals(name))
{{
//ユーザーのオンライン時間を更新します
tempuser.curtime = datetime.now;
alluser [i] = tempuser;
return(true);
}
}
}
return(false);
}
}
/*
ガーディアンスレッドクラスの確立を始めましょう:
(注:ここで、私が書き始めたとき
多くの問題の後、私はついに既存の形式をあきらめて使用することにしましたが、私は夜に戻って1つの作品を理解しました
それを使用して別のモードを再び書き込みます)
*/
パブリッククラスのチェックオンライン
{{
delay_times = 5000; //実行の実行の時間間隔は5秒です
const into delay_seconds = 30;
プライベートスレッドスレッド
private static bool_flag = false;
public checkonline()
{{
if(!_flag)
{{
_flag = true;
this.thread = new Thread(new ThreadStart(ThreadProc));
thread.name = online user;
thread.start();
}
}
InternetVoid ThreadProc()
{{
while(true)
{{
soholife.onlineususr test = new soholife.onlineususer();
for(int i = 0; i <temp.alluser.count; i ++)
{{
user tmpuser =(user)temp.alluser [i];
//ユーザーの最新の時間を80秒に追加してから、現在の時間、小さくて現在の時間と比較して、
//ユーザーがラインを一時停止し、レコードが削除されたことを意味します
if(tmpuser.curtime.addseconds(delay_seconds).compareto(datetime.now)<0)
{{
Temp.Alluser.Removeat(i);
}
}
thread.sleep(delay_times);
}
}
}
}
コンピレーションステートメントは次のとおりです。CSC /T:Library /out:../bin/online.dll /r:System.dll Online.cs