//
// MODULE: LocalECB.H
//
// PURPOSE: Interface of CLocalECB class, which implements CAbstractECB by emulating Win32's
//	EXTENSION_CONTROL_BLOCK.
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint - Local TS only
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Joe Mabel
// 
// ORIGINAL DATE: 01-07-99
//
// NOTES: 
//
// Version	Date		By		Comments
//--------------------------------------------------------------------
// V3.1		01-07-99	JM		Original
//

#if !defined(_AFX_LOCAL_INCLUDED_)
#define _AFX_LOCAL_INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "apgtsECB.h"
#include "TSNameValueMgr.h"
#include "apgtsstr.h"

class CRenderConnector;

class CLocalECB : public CAbstractECB, public CTSNameValueMgr 
{
	// emulating EXTENSION_CONTROL_BLOCK data members
	DWORD m_dwHttpStatusCode;		// only of relevance for debugging.
	CString& m_strWriteClient;
	HANDLE m_hEvent; // handler of event, main thread is waiting for;
					 //	 if NULL, main thread is not waiting for anything.
	CRenderConnector* m_pRenderConnector; // pointer to ATL control connector;
										  //  if NULL, write result page to m_strWriteClient,
										  //  otherwise call CRenderConnector::Render function.

public:
	CLocalECB(	const VARIANT& name, const VARIANT& value, int count, HANDLE hEvent, 
				CString* pstrWriteClient, CRenderConnector* pRenderConnector,
				bool bSetLocale, CString& strLocaleSetting );
	CLocalECB(	const CArrNameValue& arr, HANDLE hEvent, CString* pstrWriteClient, 
				CRenderConnector* pRenderConnector,
				bool bSetLocale, CString& strLocaleSetting );
	CLocalECB(CString* pstrWriteClient);
	~CLocalECB();

	// ======= inherited pure virtuals must be redefined =======
	virtual HCONN GetConnID() const;
	virtual DWORD SetHttpStatusCode(DWORD dwHttpStatusCode);
	virtual LPSTR GetMethod() const;
	virtual LPSTR GetQueryString() const;
	virtual DWORD GetBytesAvailable() const;
	virtual LPBYTE GetData() const;
	virtual LPSTR GetContentType() const;

    virtual BOOL GetServerVariable
   (  /*HCONN      hConn,*/
        LPCSTR       lpszVariableName,	// note, more const-ness than EXTENSION_CONTROL_BLOCK
        LPVOID      lpvBuffer,
        LPDWORD     lpdwSize );

    virtual BOOL WriteClient
   ( /*HCONN      ConnID,*/
	   LPCSTR	  Buffer,	// EXTENSION_CONTROL_BLOCK::WriteClient uses LPVOID, but it should
							//	only be legit to pass SBCS text, so we're enforcing that.
							// Also, we're adding const-ness.   
       LPDWORD    lpdwBytes
	   /* , DWORD      dwReserved */
       );

    virtual BOOL ServerSupportFunction
   ( /*HCONN      hConn,*/	// we always use the HCONN for this same COnlineECB
       DWORD      dwHSERRequest,
       LPVOID     lpvBuffer,
       LPDWORD    lpdwSize,
       LPDWORD    lpdwDataType );	

	// specific for CLocalECB class
public:
	const CString& GetWriteClient() const; // get data written by WriteClient()

private:
	// Specific for setting locales.
	bool	m_bSetLocale;
	CString	m_strLocaleSetting;
};

#endif // !defined(_AFX_LOCAL_INCLUDED_)