다음은 내 수업 파일입니다.
//online.cs (사용자 온라인 탐지)
/*프로그램 구현 아이디어 :
사용자는 다음과 같은 속성을 가지고 있습니다.
이름 : 사용자 이름
SessionID : 사용자 ID, 유일한 사람은이를 통해 사용자를 보여줍니다.
어디서나 사용자가 위치한 곳에 추가 정보
마지막으로 : 사용자 로그인 시간
큐 타임 : 이번에는 시간을 새로 고칩니다
클라이언트에서 iframe을 사용하고, 새로 고침 페이지를로드하고, xx 초마다 그의 이름에 해당하는 큐 타임을 업데이트하는 것은 그가 여전히
서버 측면에서 Guardian 스레드를 만들고 고정 시간마다 한 번 실행 한 다음 모든 현재 사용자 목록의 시간 간격이 초과되는지 여부를 결정합니다.
지정된 시간이 초과되면 사용자는 온라인 목록에서 삭제하여 사용자가 온라인 상태 여부와 혼자인지 여부를 감지 할 수 있습니다.
사용자 오프라인 처리를 작성하여 많은 사람들을 해결하기 위해 다음과 같이 묻습니다. 실수로 라인을 매달린 후 사용자의 치료.
*/
#define_debug
네임 스페이스 소홀 라이프
{{
시스템 사용;
System.Data 사용;
system.data.sqlclient 사용;
시스템 사용;
System을 사용하여 스레딩;
System.Web 사용;
System.diagnostics 사용;
// 구조를 정의합니다
공공 구조물 사용자
{{
공개 문자열 이름;
공개 DATETIME 마지막 시간;
공개 DateTime Curtime;
공개 문자열 sessionid;
공개 문자열은 어디에 있습니다.
}
// 온라인 사용자 클래스를 정의합니다
공개 클래스 온라인 사용자
{{
개인 정적 Arraylist_alluser; // 사용자 정의
공개 Arraylist Alluser
{{
geturn_alluser;}
set {_alluser = value;}
}
public onlineuser () // 구성 함수
{{
if (_allurs == null)
{{
_alluser = new ArrayList ();
}
}
// 기능 설명 : 현재 사용자를 온라인 목록에 추가
// 사용자의 데이터가 여전히 온라인 목록에있는 경우, 일시적으로 사용자에게 로그인 할 수 없으므로 사용자가 존재하도록 촉구합니다.
Public Booladdusertoonline (사용자)
{{
// 사용자가 이미 사용자 목록에 있는지 확인해야합니다.
if (_allurs == null)
{{
_alluser.add (사용자);
반환 (true);
}
또 다른
{{
for (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))
{{
return (false); // 사용자가 존재 한 다음 직접 종료합니다
}
}
_alluser.add (사용자);
반환 (true);
}
}
// 기능 설명 : 사용자가 온라인 상태인지 결정하면이 부분은 당분간 사용되지 않습니다.
// return value : true는 온라인을 나타냅니다. 거짓은 없습니다.
Publicboolean isauseronline (문자열 이름)
{{
// 사용자가 이미 사용자 목록에 있는지 확인해야합니다.
if (_allurs == null)
{{
반환 (거짓);
}
또 다른
{{
for (int i = 0; i <_alluser.count; i ++)
{{
// 사이클은 사용자가 이미 존재하는지 판단합니다
soholife.user tester = (soholife.user) _alluser [i];
if (tester.name.equals (이름))
{{
반환 (true);
}
}
반환 (거짓);
}
}
// 기능 설명 : 사용자 온라인 시간을 업데이트합니다
// 반환 값 : 최신 온라인 사용자 목록
공개 부울 checkuserOnline (문자열 이름)
{{
// 사용자가 이미 사용자 목록에 있는지 확인해야합니다.
if (_alluser! = null)
{{
for (int i = 0; i <_alluser.count; i ++)
{{
soholife.usertempuser = (soholife.user) _alluser [i];
// 먼저 현재 사용자가 자신인지 확인하십시오
if (tester.name.equals (이름))
{{
// 온라인 시간을 업데이트합니다
tempuser.curtime = datetime.now;
Alluser [i] = 템피저;
반환 (true);
}
}
}
반환 (거짓);
}
}
/*
Guardian 스레드 클래스를 설정하기 시작하겠습니다.
(참고 : 여기에서 글을 쓰기 시작했을 때
많은 문제를 겪은 후, 나는 기존 형식을 포기하고 사용하기로 결정했지만, 나는 행복에서 단일 조각을 이해했습니다
다른 모드를 다시 작성하는 데 사용합니다)
*/
공개 클래스 checkonline
{{
Delay_times 로의 const = 5000; // 실행의 시간 간격은 5 초입니다.
Delay_Seconds = 30으로 구성됩니다. // 사용자의 롤을 30 초로 설정하십시오
개인 스레드 스레드; / 내부 스레드 정의
private static bool_flag = false; // 고유 한 로고를 정의합니다
공개 checkonline ()
{{
if (! _flag)
{{
_flag = true;
this.thread = new Thread (new ThreadStart (ThreadProc));
Thread.name = 온라인 사용자;
thread.start ();
}
}
Internet void strandproc ()
{{
while (true)
{{
soholife.onlineuseusr test = new soholife.onlineuseuser ();
for (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);
}
}
}
}
컴파일 문은 다음과 같습니다.