A seguir, é o meu arquivo de classe,
//online.cs (detecção on -line do usuário)
/*Idéias de implementação do programa:
O usuário tem os seguintes atributos:
Nome: Nome de usuário
sessionID: ID do usuário, o único mostra um usuário através dele
Está onde: informações adicionais, onde o usuário está localizado atualmente
Última hora: hora de login do usuário
Curtime: tempo de atualização desta vez
No cliente, usando um iframe, carregando uma página de atualização e atualizando o curto -tempo correspondente ao seu nome a cada xx segundos, significa que ele ainda está em
No lado do servidor, construa um tópico do Guardian, execute uma vez a cada tempo fixo e, em seguida, determine se o intervalo de tempo em toda a lista de usuários atual é excedido
Se o tempo especificado for excedido, o usuário excluirá da lista on -line, para que você possa detectar se o usuário está online e se estiver sozinho
Escreva um processamento offline do usuário para resolver muitas pessoas perguntando: o tratamento do usuário depois de pendurar acidentalmente a linha.
*/
#Define_debug
namespace soholife
{{
usando o sistema;
usando System.data;
usando System.Data.SQLClient;
usando System.Collections;
usando System.Threading;
usando System.Web;
usando o System.Diagnostics;
// Defina uma estrutura
Usuário de estrutura pública
{{
Nome de String Public;
Public DateTime Last Time;
Public DateTime Curtime;
Public string sessionID;
string pública está onde;
}
// Defina a classe de usuário online
Classe Pública Onlinesuser
{{
Private Static ArrayList_alluser;
AllUser de Arraylist Public
{{
geturn_alluser;}
set {_alluser = value;}
}
Public OnlineUser () // Função de construção
{{
if (_Allurs == NULL)
{{
_allUser = new ArrayList ();
}
}
// Função Descrição: Adicione o usuário atual à lista online
// Se os dados do usuário ainda estiverem na lista on -line, ele não poderá fazer login no usuário, levando o usuário a existir
Public booladdusertoonline (usuário do usuário)
{{
// você precisa determinar se o usuário já está na lista de usuários
if (_Allurs == NULL)
{{
_alluser.add (usuário);
Retornar (true);
}
outro
{{
for (int i = 0; i <_alluser.count; i ++)
{{
// O julgamento do ciclo se o usuário já existe
Soholife.User tester = (Soholife.User) _AlUser [i];
If (tempuser.sessionid.equals (user.sessionId) && tempuser.name.equals (user.name))
{{
Retornar (false);
}
}
_alluser.add (usuário);
Retornar (true);
}
}
// Descrição da função: determine se um usuário está online, esta parte não é usada por enquanto
// Valor de retorno: True representa on -line, false não está lá
PublicBoolean IsauserOnline (nome da string)
{{
// você precisa determinar se o usuário já está na lista de usuários
if (_Allurs == NULL)
{{
Retornar (falso);
}
outro
{{
for (int i = 0; i <_alluser.count; i ++)
{{
// O julgamento do ciclo se o usuário já existe
Soholife.User tester = (Soholife.User) _AlUser [i];
if (tester.name.equals (nome))
{{
Retornar (true);
}
}
Retornar (falso);
}
}
// Descrição da função: Atualize o tempo online do usuário
// Valor de retorno: a última lista de usuários online
Public boolean checkUseronline (nome da string)
{{
// você precisa determinar se o usuário já está na lista de usuários
if (_allUser! = null)
{{
for (int i = 0; i <_alluser.count; i ++)
{{
Soholife.UsertempUser = (Soholife.User) _AlUser [i];
// primeiro determina se o usuário atual é você mesmo
if (tester.name.equals (nome))
{{
// Atualize o tempo online do usuário
tempuser.curtime = dateTime.now;
AllUser [i] = tempuser;
Retornar (true);
}
}
}
Retornar (falso);
}
}
/*
Vamos começar a estabelecer uma aula de threads do Guardian:
(Nota: aqui, quando comecei a escrever
Depois de muitos problemas, finalmente decidi desistir e usar o formato existente, mas eu apenas entendi uma única peça da felicidade.
Usará para escrever outro modo novamente)
*/
Checkonline da aula pública
{{
Const em atraso_times = 5000;
Const em atraso_seconds = 30;
Tópico privado;
Private estático bool_flag = false;
Checkonline público ()
{{
if (! _flag)
{{
_Flag = true;
this.Thread = new Thread (new ThreadStart (ThreadProc));
thread.name = usuário online;
Thread.start ();
}
}
Internet void ThreadProc ()
{{
Enquanto (verdadeiro)
{{
Soholife.OnlineuseUSR Test = new Soholife.onlineuseUser ();
for (int i = 0; i <temp.alluser.count; i ++)
{{
usuário tmpuser = (usuário) temp.alluser [i];
// Eu adicionei o tempo mais recente do usuário a 80 segundos e, em seguida, comparado com o horário atual, pequeno e atual, horário,
// Isso significa que o usuário suspendeu a linha, então seu registro é excluído
if (tmpuser.curtime.addSeconds (deoun_seconds) .compareto (dateTime.now) <0)
{{
temp.alluser.removeat (i);
}
}
Thread.sleep (atraso_times);
}
}
}
}
A declaração de compilação é: csc /t: biblioteca /out:../bin/online.dll /r: system.dll online.cs