www.pudn.com > UDP文件传输.rar > ZsP2pUserList.h


#ifndef ZS_P2P_USERLIST_H 
#define ZS_P2P_USERLIST_H 1 
/////////////	ZsP2pUserList.h	////////////////////////// 
#include "HList.h" 
#include "svr_userinfo.h" 
class CZsP2pUserList:public ISvrUserinfo 
{ 
	typedef CHList USER_ITEM; 
	USER_ITEM  m_UserList; 
	UNI_DWORD m_UserCount; 
	CHMutex m_userMutex; 
public: 
	virtual UNI_DWORD GetUserCount() 
	{ 
		return m_UserCount; 
	} 
	virtual UNI_BOOL InserUser(P2P_SVRITEM *puser) 
	{ 
		UNI_BOOL ret; 
		USER_ITEM::NODETYPE *pNode; 
		ret=UNI_FALSE; 
		m_userMutex.Lock(); 
		if(pNode=m_UserList.AddTail()) 
		{ 
			memcpy(pNode,puser,sizeof(USER_ITEM::NODETYPE)); 
			m_UserCount++; 
			ret=UNI_TRUE; 
		} 
		m_userMutex.UnLock(); 
		return ret; 
	} 
	virtual UNI_BOOL SetUser(P2P_SVRITEM *puser) 
	{ 
		USER_ITEM::NODETYPE *pNode; 
		USER_ITEM::HLISTPOSTION pos; 
		UNI_BOOL ret=UNI_FALSE; 
		m_userMutex.Lock(); 
		if(pos=m_UserList.MoveToBegin()) 
		{ 
			while(pNode=m_UserList.MoveToNext(pos)) 
			{ 
				if(strcmp(pNode->userName,puser->userName)==0) 
				{ 
					memcpy(pNode,puser,sizeof(USER_ITEM::NODETYPE)); 
					ret= UNI_TRUE; 
					break; 
				} 
			} 
		} 
		m_userMutex.UnLock(); 
		return ret; 
 
	} 
	virtual UNI_BOOL GetUserInfo(char *userName,P2P_SVRITEM * puser) 
	{ 
		USER_ITEM::NODETYPE *pNode; 
		USER_ITEM::HLISTPOSTION pos; 
		UNI_BOOL ret=UNI_FALSE; 
		m_userMutex.Lock(); 
		if(pos=m_UserList.MoveToBegin()) 
		{ 
			while(pNode=m_UserList.MoveToNext(pos)) 
			{ 
				if(strcmp(pNode->userName,userName)==0) 
				{ 
					memcpy(puser,pNode,sizeof(USER_ITEM::NODETYPE)); 
					ret= UNI_TRUE; 
					break; 
				} 
			} 
		} 
		m_userMutex.UnLock(); 
		return ret; 
	} 
	virtual void RemovUser(char *userName) 
	{ 
		USER_ITEM::NODETYPE *pNode; 
		USER_ITEM::HLISTPOSTION pos; 
		m_userMutex.Lock(); 
		if(pos=m_UserList.MoveToBegin()) 
		{ 
			while(pNode=m_UserList.MoveToNext(pos)) 
			{ 
				if(strcmp(pNode->userName,userName)==0) 
				{ 
					m_UserList.Remove(pNode); 
					if(m_UserCount) 
						m_UserCount--; 
					break;; 
				} 
			} 
		} 
		m_userMutex.UnLock(); 
	} 
	virtual void DeleteUsers(UNI_DWORD dwTimeOut,UNI_DWORD dwTickCount) 
	{ 
		USER_ITEM::NODETYPE *pNode; 
		USER_ITEM::HLISTPOSTION pos; 
		m_userMutex.Lock(); 
		if(pos=m_UserList.MoveToBegin()) 
		{ 
			while(pNode=m_UserList.MoveToNext(pos)) 
			{ 
				if((UNI_DWORD)(dwTickCount-pNode->dwTickCount)>dwTimeOut) 
				{ 
					m_UserList.Remove(pNode); 
					if(m_UserCount) 
						m_UserCount--; 
				} 
			} 
		} 
		m_userMutex.UnLock(); 
	} 
 
}; 
//////////////////////////////////////////////// 
#endif