www.pudn.com > QQ2004_Source_0.01.rar > ServerService.h


#pragma once 
 
#include "UserList.h"	// Added by ClassView 
 
#define WM_SERVICE_NOTIFY WM_USER + 101 
 
typedef struct tagListenParam 
{ 
	CUserList *list; 
	CEvent *finishEvent; 
}LISTEN_PARAM; 
 
#define DEAL_REQUEST_BEGIN() \ 
	_ASSERTE(request != NULL && responseRoot != NULL);\ 
	if (request == NULL || responseRoot == NULL)\ 
		return E_INVALIDARG;\ 
	CElement *requestRoot = request->get_root();\ 
	_ASSERTE(requestRoot != NULL);\ 
	if (requestRoot == NULL)\ 
		return E_POINTER; 
 
class CXMLParser; 
class CElement; 
class CServerService 
{ 
public: 
	CServerService(void); 
	~CServerService(void); 
 
	static HRESULT dealRequest(BYTE *data,  
							   int dataLen,  
							   const SOCKET &sock,  
							   const sockaddr_in &addrFrom, 
							   CUserList *list); 
 
	HRESULT startListen(CUserList *list); 
	HRESULT stopListen(); 
 
	BOOL isListening(){ 
		return _listenThread != NULL; 
	} 
 
protected: 
	HANDLE _listenThread; 
	CEvent _finishEvent; 
 
	CUserList *_list; 
 
	static UINT serviceProc(LPVOID wParam); 
	static CString logMessage(CXMLParser *msg, const sockaddr_in &addrFrom); 
 
	static HRESULT dealLogOnRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealLogOffRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealRegisterRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealAddFriendRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealDownloadFriendsRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealQueryUserRequest(CXMLParser *request, CElement *responseRoot, CUserList &list); 
	static HRESULT dealOnlineRequest(CXMLParser *request, CElement *responseRoot, const sockaddr_in &addrFrom, CUserList &list); 
};