El siguiente es mi archivo de clase,
//online.cs (detección en línea del usuario)
/*Ideas de implementación del programa:
El usuario tiene los siguientes atributos:
Nombre: nombre de usuario
SessionID: ID de usuario, el único muestra a un usuario a través de él
Está en el lugar: información adicional, donde se encuentra actualmente el usuario
Último tiempo: tiempo de inicio de sesión del usuario
Curtime: actualizar el tiempo esta vez
En el cliente, utilizando un iframe, cargando una página de actualización y actualización del tiempo curioso correspondiente a su nombre cada XX segundos, significa que todavía está en
En el lado del servidor, construya un hilo de tutor, ejecute una vez cada tiempo fijo y luego determine si se excede el intervalo de tiempo en toda la lista de usuarios actuales
Si se excede el tiempo especificado, el usuario elimina la lista en línea, para que pueda detectar si el usuario está en línea y si está solo
Escriba un procesamiento fuera de línea del usuario para resolver muchas personas que preguntan: el tratamiento del usuario después de colgar accidentalmente la línea.
*/
#Define_debug
Espacio de nombres Soholife
{{
usando el sistema;
usando System.Data;
usando System.Data.SqlClient;
usando System.Collections;
usando System.Threading;
usando System.web;
usando System.DiaGnósticos;
// Defina una estructura
Usuario de estructura pública
{{
nombre de cadena pública;
Public DateTime la última vez;
Public DateTime Curtime;
SessionD de cadena pública;
Cadena pública está donde;
}
// Defina la clase de usuario en línea
Clase pública en línea
{{
Private Static ArrayList_Alluser;
Allusor de ArrayList Public
{{
geturn_alluser;}
establecer {_alluser = valor;}
}
Public OnlineUser () // Función de construcción
{{
if (_allurs == nulo)
{{
_Alluser = new ArrayList ();
}
}
// Descripción de la función: Agregue el usuario actual a la lista en línea
// Si los datos del usuario todavía están en la lista en línea, no se permite que el usuario se inicie temporalmente, lo que le indica al usuario a existir.
Public booladdusertoonline (usuario de usuario)
{{
// debe determinar si el usuario ya está en la lista de usuarios
if (_allurs == nulo)
{{
_Alluser.Add (usuario);
Return (verdadero);
}
demás
{{
para (int i = 0; i <_alluser.count; i ++)
{{
// El juicio ciclista si el usuario ya existe
soholife.user tester = (Soholife.user) _Alluser [i];
If (tempuser.sessionid.equals (user.sessionID) && tempuser.name.equals (user.name)))
{{
Return (falso); / el usuario existe, luego salga directamente
}
}
_Alluser.Add (usuario);
Return (verdadero);
}
}
// Descripción de la función: determine si un usuario está en línea, esta parte no se usa por el momento
// Valor de retorno: Verdadero representa en línea, False no está ahí
PublicBoolean Isauseronline (nombre de cadena)
{{
// debe determinar si el usuario ya está en la lista de usuarios
if (_allurs == nulo)
{{
Return (falso);
}
demás
{{
para (int i = 0; i <_alluser.count; i ++)
{{
// El juicio ciclista si el usuario ya existe
soholife.user tester = (Soholife.user) _Alluser [i];
if (tester.name.equals (nombre))
{{
Return (verdadero);
}
}
Return (falso);
}
}
// Descripción de la función: actualizar el tiempo en línea del usuario
// Valor de retorno: la última lista de usuarios en línea
Public boolean checkuseronline (nombre de cadena)
{{
// debe determinar si el usuario ya está en la lista de usuarios
if (_alluser! = null)
{{
para (int i = 0; i <_alluser.count; i ++)
{{
SOHOHIFE.USERTEMPUSER = (SOHOHIVE.USER) _Alluser [i];
// Determine primero si el usuario actual es usted mismo
if (tester.name.equals (nombre))
{{
// Actualizar la hora del usuario en línea
tempuser.curtime = dateTime.now;
Alluser [i] = tempuser;
Return (verdadero);
}
}
}
Return (falso);
}
}
/*
Comencemos a establecer una clase de hilo de Guardian:
(Nota: Aquí, cuando comencé a escribir
Después de muchos problemas, finalmente decidí rendirme y usar el formato existente, pero solo tenía una comprensión de una sola pieza de la felicidad.
Lo usará para volver a escribir otro modo)
*/
Línea de control de clase pública
{{
Const en demora_times = 5000;
Const en demora_seconds = 30;
Hilo privado;
Privado static bool_flag = falso;
Línea pública de control ()
{{
if (! _flag)
{{
_Flag = true;
this.thread = new Thread (new ThreadStart (ThreadProc));
Thread.name = User en línea;
Thread.Start ();
}
}
Internet void threadproc ()
{{
Mientras (verdadero)
{{
SOHOLIFE.NINEUSUSR test = new Soholife.OnlineuseUser ();
para (int i = 0; i <temp.alluser.count; i ++)
{{
usuario tmpuser = (usuario) temp.alluser [i];
// Agregué la última vez del usuario a 80 segundos, y luego comparé con la hora actual, la pequeña y actual hora,
// Significa que el usuario ha suspendido la línea, luego se elimina su registro
if (tmpuser.curtime.addseconds (demandado_seconds) .compareto (datetime.now) <0)
{{
temp.alluser.removeat (i);
}
}
Thread.sleep (demora_times);
}
}
}
}
La declaración de compilación es: CSC /T: Library /out:../bin/online.dll /r: system.dll en línea.cs