ما يلي هو ملف الفصل الخاص بي ،
//online.cs (اكتشاف المستخدم عبر الإنترنت)
/*أفكار تنفيذ البرنامج:
المستخدم لديه السمات التالية:
الاسم: اسم المستخدم
SessionId: معرف المستخدم ، يعرض المستخدم الوحيد من خلاله
في أي مكان: معلومات إضافية ، حيث يوجد المستخدم حاليًا
آخر مرة: وقت تسجيل دخول المستخدم
Curtime: تحديث الوقت هذه المرة
على العميل ، باستخدام iframe ، وتحميل صفحة تحديث ، وتحديث الكوران المقابل لاسمه في كل XX Seconds ، فهذا يعني أنه لا يزال في
على جانب الخادم ، قم بإنشاء مؤشر ترابط الوصي ، وقم بتشغيله مرة واحدة في كل وقت ثابت ، ثم حدد ما إذا كان يتم تجاوز الفاصل الزمني في جميع قائمة المستخدمين الحالية
إذا تم تجاوز الوقت المحدد ، يقوم المستخدم بحذف من القائمة عبر الإنترنت ، بحيث يمكنك اكتشاف ما إذا كان المستخدم متصلاً بالإنترنت ، وإذا كان وحده
اكتب معالجة مستخدم غير متصل بحل العديد من الأشخاص الذين يسألون: معالجة المستخدم بعد تعليق الخط بطريق الخطأ.
*/
#define_debug
مساحة الاسم السخرية
{{
باستخدام النظام ؛
باستخدام System.Data ؛
باستخدام system.data.sqlclient ؛
باستخدام System.Collections ؛
باستخدام System.Threading ؛
باستخدام system.web ؛
باستخدام System.Diagnostics ؛
// تحديد الهيكل
مستخدم الهيكل العام
{{
اسم السلسلة العامة ؛
عام البيانات العام الماضي ؛
كورتي وقت البيانات العام ؛
السلسلة العامة SessionId ؛
السلسلة العامة في أي مكان ؛
}
// تحديد فئة المستخدم عبر الإنترنت
الطبقة العامة عبر الإنترنت
{{
arraylist static static static ؛
ArrayList Pluster
{{
geturn_alluser ؛}
تعيين {_alluser = value ؛}
}
العام العام () // وظيفة البناء
{{
إذا (_allurs == null)
{{
_ alluser = new ArrayList () ؛
}
}
// الوصف الوصف: أضف المستخدم الحالي إلى القائمة عبر الإنترنت
// إذا كانت بيانات المستخدم لا تزال موجودة في القائمة عبر الإنترنت ، فلا يُسمح لها مؤقتًا بتسجيل الدخول إلى المستخدم ، مما يدفع المستخدم إلى الوجود
booladdusertoonline العام (مستخدم المستخدم)
{{
// تحتاج إلى تحديد ما إذا كان المستخدم موجودًا بالفعل في قائمة المستخدمين
إذا (_allurs == null)
{{
_alluser.add (المستخدم) ؛
العودة (صواب) ؛
}
آخر
{{
لـ (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))
{{
العودة (خطأ) ؛
}
}
_alluser.add (المستخدم) ؛
العودة (صواب) ؛
}
}
// الوصف الوصف: تحديد ما إذا كان المستخدم متصلاً بالإنترنت ، لا يتم استخدام هذا الجزء في الوقت الحالي
// قيمة الإرجاع: True تمثل عبر الإنترنت ، خطأ ليس هناك
PublicBoolean Isauseronline (اسم السلسلة)
{{
// تحتاج إلى تحديد ما إذا كان المستخدم موجودًا بالفعل في قائمة المستخدمين
إذا (_allurs == null)
{{
العودة (خطأ) ؛
}
آخر
{{
لـ (int i = 0 ؛ i <_alluser.count ؛ i ++)
{{
// حكم الدورة سواء كان المستخدم موجودًا بالفعل
soholife.user tester = (soholife.user) _alluser [i] ؛
if (tester.name.equals (name))
{{
العودة (صواب) ؛
}
}
العودة (خطأ) ؛
}
}
// الوصف الوصف: تحديث المستخدم على الإنترنت
// قيمة الإرجاع: أحدث قائمة مستخدمين عبر الإنترنت
checkeronline المنطقي العام (اسم السلسلة)
{{
// تحتاج إلى تحديد ما إذا كان المستخدم موجودًا بالفعل في قائمة المستخدمين
إذا (_ alluser! = null)
{{
لـ (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 ؛
العودة (صواب) ؛
}
}
}
العودة (خطأ) ؛
}
}
/*
لنبدأ في إنشاء فئة خيط وصي:
(ملاحظة: هنا ، عندما بدأت الكتابة
بعد العديد من المشكلات ، قررت أخيرًا الاستسلام واستخدام التنسيق الحالي ، لكنني فقط فهمت قطعة واحدة من السعادة.
سوف تستخدمه لكتابة وضع آخر مرة أخرى)
*/
خط الفئة العامة
{{
const في تأخيرات = 5000 ؛
const في تأخير_Seconds = 30 ؛
موضوع خاص
private static bool_flag = false ؛
خط الفحص العام ()
{{
إذا (! _flag)
{{
_flag = صحيح ؛
this.thread = موضوع جديد (ThreadStart جديد (ThreadProc)) ؛
thread.name = مستخدم عبر الإنترنت ؛
thread.start () ؛
}
}
عبر الإنترنت threadproc ()
{{
بينما (صحيح)
{{
اختبار soholife.onlineuseusr
لـ (int i = 0 ؛ i <temp.alluser.count ؛ i ++)
{{
المستخدم tmpuser = (المستخدم) 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