Das Folgende ist meine Klassendatei,
//online.cs (Benutzer Online -Erkennung)
/*Programmimplementierungsideen:
Der Benutzer hat die folgenden Attribute:
Name: Benutzername
SessionID: Benutzer -ID, der einzige zeigt einen Benutzer durch
WHERE: Zusätzliche Informationen, in denen sich der Benutzer derzeit befindet
Letzte Zeit: Benutzeranmeldezeit
Curtime: Diesmal aktualisieren Sie die Zeit
Auf dem Client unter Verwendung eines Iframe, des Ladens einer Aktualisierungsseite und der Aktualisierung der Curtime, die seinem Namen alle xx Sekunden entspricht, bedeutet dies, dass er noch in
Erstellen Sie auf der Serverseite einen Wächter -Thread, laufen Sie einmal in festen Zeit
Wenn die angegebene Zeit überschritten wird, löscht der Benutzer aus der Online -Liste, sodass Sie feststellen können, ob der Benutzer online ist und ob er allein ist
Schreiben Sie eine Offline -Verarbeitung einer Benutzer, um viele Personen zu lösen, die fragen: die Behandlung des Benutzers, nachdem Sie versehentlich die Leitung aufgehängt haben.
*/
#Define_Debug
Namespace Soholife
{{{{
mit System verwenden;
mit System.data;
mit System.data.sqlclient;
mit System.Collections;
mit System.Threading;
mit System.Web;
mit System.Diagnostics;
// eine Struktur definieren
Öffentlicher Struktur Benutzer
{{{{
öffentlicher String -Name;
öffentliche DateTime letztes Mal;
öffentliche DateTime Curime;
Öffentliche String SessionID;
öffentliche Schnur ist wo;
}
// Definieren Sie die Online -Benutzerklasse
öffentliche Klasse Online -user
{{{{
Private statische ArrayList_alluser;
Öffentlicher Arraylist -Analuser
{{{{
geturn_alluser;}
Setzen Sie {_alluser = value;}
}
public Onlineuser () // Konstruktfunktion
{{{{
if (_allurs == null)
{{{{
_Alluser = new ArrayList ();
}
}
// Funktion Beschreibung: Fügen Sie den aktuellen Benutzer der Online -Liste hinzu
// Wenn sich die Daten des Benutzers noch in der Online -Liste befinden, ist es vorübergehend nicht gestattet, sich beim Benutzer anzumelden, und fordert den Benutzer auf, zu existieren
Public BooladDuserToOnline (Benutzerbenutzer)
{{{{
// Sie müssen feststellen, ob sich der Benutzer bereits in der Benutzerliste befindet
if (_allurs == null)
{{{{
_Alluser.add (Benutzer);
Return (wahr);
}
anders
{{{{
für (int i = 0; i <_alluser.count; i ++)
{{{{
// das Zyklusurteil, ob der Benutzer bereits existiert
Soholife.User Tester = (Soholife.User) _Alluser [i];
If (tempuser.sessionid.equals (user.SessionId) && tempuser.name.equals (user.name))
{{{{
Rückgabe (falsch) // Der Benutzer existiert direkt
}
}
_Alluser.add (Benutzer);
Return (wahr);
}
}
// Funktionsbeschreibung: Bestimmen Sie, ob ein Benutzer online ist. Dieser Teil wird vorerst nicht verwendet
// Rückgabewert: True repräsentiert online, false ist nicht da
Publicboolean isauseronline (String -Name)
{{{{
// Sie müssen feststellen, ob sich der Benutzer bereits in der Benutzerliste befindet
if (_allurs == null)
{{{{
Return (falsch);
}
anders
{{{{
für (int i = 0; i <_alluser.count; i ++)
{{{{
// das Zyklusurteil, ob der Benutzer bereits existiert
Soholife.User Tester = (Soholife.User) _Alluser [i];
if (tester.name.equals (name))
{{{{
Return (wahr);
}
}
Return (falsch);
}
}
// Funktionsbeschreibung: Benutzer online aktualisieren
// Rückgabewert: Die neueste Online -Benutzerliste
Public Boolean CheckuserOnline (Zeichenfolge Name)
{{{{
// Sie müssen feststellen, ob sich der Benutzer bereits in der Benutzerliste befindet
if (_alluser! = null)
{{{{
für (int i = 0; i <_alluser.count; i ++)
{{{{
Soholife.Usertempuser = (Soholife.User) _Alluser [i];
// Bestimmen Sie zuerst, ob der aktuelle Benutzer Sie selbst sind
if (tester.name.equals (name))
{{{{
// Benutzer online aktualisieren
tempuser.curtime = datetime.now;
Anbieter [i] = Tempuser;
Return (wahr);
}
}
}
Return (falsch);
}
}
/*
Lassen Sie uns eine Guardian -Thread -Klasse aufbauen:
(Hinweis: Als ich anfing zu schreiben
Nach vielen Problemen entschied ich mich schließlich, das vorhandene Format aufzugeben und zu verwenden, aber ich hatte nur ein einzelnes Stück aus dem Glück.
Wird es verwenden, um einen anderen Modus erneut zu schreiben)
*/
Öffentliche Klassenprüfung
{{{{
Const in Dely_times = 5000;
Const in Delay_seconds = 30;
Privat Thread; // interne Threads definieren
Private statische bool_flag = false;
Public checkonline ()
{{{{
if (! _flag)
{{{{
_Flag = true;
this.thread = neuer Thread (neuer ThreadStart (ThreadProc));
Thread.Name = Online -Benutzer;
Thread.Start ();
}
}
Internet void threadProc ()
{{{{
Während (wahr)
{{{{
Soholife.onlineUsesr test = new Soholife.onlineUsesuser ();
für (int i = 0; i <temp.alluser.count; i ++)
{{{{
Benutzer tmpuser = (Benutzer) temp.alluser [i];
// Ich habe die neueste Zeit des Benutzers 80 Sekunden hinzugefügt und dann mit der aktuellen Zeit und der aktuellen Zeit verglichen.
// Dies bedeutet, dass der Benutzer die Zeile suspendiert hat, dann wird sein Datensatz gelöscht
if (tmpuser.curtime
{{{{
temp.alluser.removeat (i);
}
}
Thread.sleep (Delay_times);
}
}
}
}
Die Kompilierungsanweisung lautet: CSC /T: Bibliothek /out:../bin/online.dll /r: system.dll online.cs