📄 exchangeclient.h
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
#ifndef _EXCHANGECLIENT_H_222129103_ // To prevent multiple #includes
#define _EXCHANGECLIENT_H_222129103_
#include "msxml2.h"
#include "IExchangeClient.h"
#include "Includes.h"
#include "List.hxx"
#include "XMLDataRecordParser.h"
class IExchangeClientFormatHandler;
class CExchangeClientRequest;
typedef ce::list<CExchangeClientRequest *> RequestQueue;
class ATL_NO_VTABLE CExchangeClient :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CExchangeClient, &CLSID_ExchangeClient>,
public IExchangeClient
{
public:
CExchangeClient();
virtual ~CExchangeClient();
public:
//IUnknown:
DECLARE_NO_REGISTRY()
BEGIN_COM_MAP(CExchangeClient)
COM_INTERFACE_ENTRY(IExchangeClient)
END_COM_MAP()
public:
//IExchangeClient
virtual HRESULT STDMETHODCALLTYPE Initialize(
IExchangeClientRequestCallback *piCallback
);
virtual HRESULT STDMETHODCALLTYPE SetCredentials(
const WCHAR *c_wszUsername,
const WCHAR *c_wszPassword
);
virtual HRESULT STDMETHODCALLTYPE SetServer(
const WCHAR *c_wszServername
);
virtual HRESULT STDMETHODCALLTYPE GetServer(
WCHAR *wszBuffer,
UINT cchBuffer
);
virtual HRESULT STDMETHODCALLTYPE RequestContacts(
ContactsSearchCriteria *pCriteria,
IExchangeClientRequest **ppiRequest
);
virtual HRESULT STDMETHODCALLTYPE RequestGALSearch(
GALSearchCriteria *pCriteria,
IExchangeClientRequest **ppiRequest
);
virtual HRESULT STDMETHODCALLTYPE RequestFreeBusyData(
FreeBusyCriteria *pCriteria,
IExchangeClientRequest **ppiRequest
);
virtual HRESULT STDMETHODCALLTYPE CancelPendingRequests();
virtual HRESULT STDMETHODCALLTYPE Uninitialize();
public:
//Helper functions for Requests to call into
HRESULT CallbackOnMainThread(
CExchangeClientRequest *pRequestObject,
ExchangeClientRequestStatus ecrs
);
inline IExchangeClientRequestCallback *GetCallbackInterface()
{
ASSERT(m_cpCallback != NULL);
return m_cpCallback;
}
HRESULT BypassOWALoginPage(
IXMLHTTPRequest *piRequest
);
HRESULT CancelMe(
CExchangeClientRequest *pRequestObject
);
private:
//Worker thread helpers
static DWORD WINAPI s_WorkerThreadProc(
LPVOID lpvThreadProcParam
);
HRESULT WorkerThreadProc();
HRESULT OnWorkerThreadTermination();
private:
//Syncronization functions
inline VOID LockRequests() { EnterCriticalSection(&m_csRequestLock); }
inline VOID UnlockRequests() { LeaveCriticalSection(&m_csRequestLock); }
inline VOID InitializeRequestLock() { InitializeCriticalSection(&m_csRequestLock); }
inline VOID DeleteRequestLock() { DeleteCriticalSection(&m_csRequestLock); }
private:
//Helpers for the current request
VOID SetCurrentRequest(IExchangeClientRequest *piRequest);
VOID CancelCurrentRequest();
private:
//Initialization helper functions
HRESULT RegisterCallbackWindow();
HRESULT CreateWorkerThreadAndEvents();
HRESULT RecreateXMLHttpObject();
static LRESULT CALLBACK s_CallbackWindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
private:
//Request helper functions
HRESULT GetNextRequest(
CExchangeClientRequest * * ppRequest
);
HRESULT AddNewRequest(
CExchangeClientRequest * pRequest
);
HRESULT DispatchRequest(
ExchangeClientRequestType rt,
VOID * pvRequestParams,
IExchangeClientFormatHandler * piHandler,
IExchangeClientRequest * * ppiRequest
);
private:
//Am I initialized?
BOOL m_fInitialized;
//Hidden callback window handle
HWND m_hwndCallback;
//Guard for request queueing
CRITICAL_SECTION m_csRequestLock;
//Queue of requests
RequestQueue m_queuePendingRequests;
//Object used to send the request
CComPtr<IXMLHTTPRequest> m_cpHttpRequest;
CComPtr<IClassFactory> m_cpXMLHTTPRequestClassFactory;
//Parser
CXMLDataRecordParser m_DataRecordParser;
//Event/thread handles
HANDLE m_hWorkerThread;
HANDLE m_hEventNewRequest;
HANDLE m_hEventExit;
CComPtr<IExchangeClientRequestCallback> m_cpCallback;
CComPtr<IExchangeClientRequest> m_cpCurrentRequest;
ce::wstring m_wstrServer;
};
#endif // !defined _EXCHANGECLIENT_H_222129103_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -