Berikut ini adalah file kelas saya,
//online.cs (deteksi online pengguna)
/*Ide Implementasi Program:
Pengguna memiliki atribut berikut:
Nama: Nama pengguna
sessionId: ID pengguna, satu -satunya menunjukkan pengguna melaluinya
Di mana -mana: informasi tambahan, di mana pengguna saat ini berada
Terakhir: Waktu Login Pengguna
Curtime: Segarkan kali kali ini
Pada klien, menggunakan iframe, memuat halaman refresh, dan memperbarui curTime yang sesuai dengan namanya setiap detik xx, itu berarti dia masih masuk
Di sisi server, bangun utas wali, jalankan sekali setiap waktu yang tepat, dan kemudian tentukan apakah interval waktu dalam semua daftar pengguna saat ini terlampaui
Jika waktu yang ditentukan terlampaui, pengguna menghapus dari daftar online, sehingga Anda dapat mendeteksi apakah pengguna online, dan jika sendirian
Tulis pemrosesan offline pengguna untuk menyelesaikan banyak orang yang bertanya: Perlakuan pengguna setelah secara tidak sengaja menggantung garis.
*/
#Define_debug
namespace Soholife
{{
menggunakan sistem;
menggunakan System.data;
menggunakan system.data.sqlclient;
menggunakan System.Collections;
menggunakan System.Threading;
menggunakan System.web;
menggunakan System.diagnostics;
// tentukan struktur
Pengguna Struct Publik
{{
nama string publik;
Datetime publik terakhir;
Curtime Datetime Publik;
Public String SessionID;
string publik ada di mana;
}
// Tentukan kelas pengguna online
Public Class OnlineSer
{{
Private Static ArrayList_alluser; // Tentukan pengguna
Public ArrayList Alluser
{{
geturn_alluser;}
atur {_alluser = value;}
}
Publik OnlineUser () // Fungsi Bangun
{{
if (_allurs == null)
{{
_alluser = arraylist baru ();
}
}
// Deskripsi Fungsi: Tambahkan pengguna saat ini ke daftar online
// Jika data pengguna masih dalam daftar online, sementara tidak diizinkan masuk ke pengguna, mendorong pengguna untuk ada
Booladdusertoonline publik (pengguna pengguna)
{{
// Anda perlu menentukan apakah pengguna sudah ada di daftar pengguna
if (_allurs == null)
{{
_alluser.add (pengguna);
Kembali (benar);
}
kalau tidak
{{
untuk (int i = 0; i <_alluser.count; i ++)
{{
// penilaian siklus apakah pengguna sudah ada
tester SOHOLIFE.USER = (SOHOLIFE.USER) _alluser [i];
If (tempuser.SessionId.equals (user.SessionId) && tempuser.name.equals (user.name))
{{
Return (false); // pengguna ada, lalu keluar secara langsung
}
}
_alluser.add (pengguna);
Kembali (benar);
}
}
// Deskripsi Fungsi: Tentukan apakah pengguna online, bagian ini tidak digunakan untuk saat ini
// nilai pengembalian: true mewakili online, false tidak ada
PublicBoolean Isauseronline (nama string)
{{
// Anda perlu menentukan apakah pengguna sudah ada di daftar pengguna
if (_allurs == null)
{{
Return (false);
}
kalau tidak
{{
untuk (int i = 0; i <_alluser.count; i ++)
{{
// penilaian siklus apakah pengguna sudah ada
tester SOHOLIFE.USER = (SOHOLIFE.USER) _alluser [i];
if (tester.name.equals (name)))
{{
Kembali (benar);
}
}
Return (false);
}
}
// Deskripsi Fungsi: Perbarui waktu online pengguna
// Nilai Pengembalian: Daftar Pengguna Online Terbaru
Public Boolean CheckUserOnline (nama string)
{{
// Anda perlu menentukan apakah pengguna sudah ada di daftar pengguna
if (_alluser! = null)
{{
untuk (int i = 0; i <_alluser.count; i ++)
{{
SOHOLIFE.USERTEMPUSER = (SOHOLIFE.USER) _alluser [i];
// Pertama tentukan apakah pengguna saat ini adalah diri Anda sendiri
if (tester.name.equals (name)))
{{
// Perbarui waktu online pengguna
tempuser.curtime = datetime.now;
alluser [i] = tempuser;
Kembali (benar);
}
}
}
Return (false);
}
}
/*
Mari kita mulai membangun kelas utas wali:
(Catatan: di sini, saat saya mulai menulis
Setelah banyak masalah, saya akhirnya memutuskan untuk menyerah dan menggunakan format yang ada, tetapi saya hanya memiliki pemahaman tentang satu bagian dari kebahagiaan.
Akan menggunakannya untuk menulis mode lain lagi)
*/
CheckOnline kelas publik
{{
Const ke delay_times = 5000;
Const ke delay_seconds = 30;
Thread Private Thread; // Tentukan utas internal
Private static bool_flag = false; // tentukan logo unik
Checkonline publik ()
{{
if (! _flag)
{{
_Flag = true;
this.thread = utas baru (threadStart baru (threadProc));
thread.name = pengguna online;
Thread.start ();
}
}
Internet void threadProc ()
{{
Sementara (benar)
{{
tes SOHOLIFE.ONLINEUSEUSR = SOHOLIFE.Onlineuser baru ();
untuk (int i = 0; i <temp.alluser.count; i ++)
{{
pengguna tmpuser = (pengguna) temp.alluser [i];
// Saya menambahkan waktu terbaru pengguna ke 80 detik, dan kemudian dibandingkan dengan waktu saat ini, waktu kecil dan saat ini,
// itu berarti bahwa pengguna telah menangguhkan garis, maka catatannya dihapus
if (tmpuser.curtime.addseconds (delay_seconds) .compareto (datetime.now) <0)
{{
temp.alluser.removeat (i);
}
}
Thread.sleep (delay_times);
}
}
}
}
Pernyataan kompilasi adalah: csc /t: library /out:../bin/online.dll /r: system.dll online.cs