|
|
#ifndef DOCUMENT_H
#define DOCUMENT_H
#pragma once
#include "private.h"
#define MAXFILEPATHLEN 256
#define MAXSTRINGLEN 256
#define NLBMGR_AUTOREFRESH_MIN_INTERVAL 15
#define NLBMGR_AUTOREFRESH_DEF_INTERVAL 60
//
// A single instance of this class, gCmdLineInfo, is initialized
// by the Application object.
//
class CNlbMgrCommandLineInfo : public CCommandLineInfo { public:
CNlbMgrCommandLineInfo(VOID) : m_bDemo(FALSE), m_bNoPing(FALSE), m_bHostList(FALSE), m_bUsage(FALSE), m_bAutoRefresh(FALSE), m_refreshInterval(NLBMGR_AUTOREFRESH_DEF_INTERVAL) { }
BOOL m_bAutoRefresh; UINT m_refreshInterval; BOOL m_bDemo; BOOL m_bNoPing; BOOL m_bHostList; BOOL m_bUsage; _bstr_t m_bstrHostListFile;
virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast ); };
extern CNlbMgrCommandLineInfo gCmdLineInfo;
class CUIWorkItem {
public:
//
// Use this constructor to create a work item for a log request
//
CUIWorkItem( IN const IUICallbacks::LogEntryHeader *pHeader, IN const wchar_t *szText ) { workItemType = ITEM_LOG;
try { type = pHeader->type; bstrCluster = pHeader->szCluster; bstrHost = pHeader->szHost; bstrInterface = pHeader->szInterface; bstrText = szText; bstrDetails = pHeader->szDetails; } catch(...) { //
// in case there's an bstr alloc failure.
//
workItemType = ITEM_INVALID; } }
//
// Use this constructor to create a work item for a "HandleEngineEvent"
// notification.
//
CUIWorkItem( IN IUICallbacks::ObjectType objtypeX, IN ENGINEHANDLE ehClusterIdX, // could be NULL
IN ENGINEHANDLE ehObjIdX, IN IUICallbacks::EventCode evtX ) { workItemType = ITEM_ENGINE_EVENT;
objtype = objtypeX; ehClusterId = ehClusterIdX; ehObjId = ehObjIdX; evt = evtX; }
~CUIWorkItem() { }
enum { ITEM_INVALID=0, ITEM_LOG, ITEM_ENGINE_EVENT
} workItemType;
//
// Log function related
//
IUICallbacks::LogEntryType type; _bstr_t bstrCluster; _bstr_t bstrHost; _bstr_t bstrInterface; _bstr_t bstrText; _bstr_t bstrDetails;
//
// Handle engine event related...
//
IUICallbacks::ObjectType objtype; ENGINEHANDLE ehClusterId; ENGINEHANDLE ehObjId; IUICallbacks::EventCode evt; };
class Document : public CDocument, public IUICallbacks { DECLARE_DYNCREATE( Document )
public:
enum IconNames { //
// This order must exactly the order in which Icons are loaded
// in Document::Document.
//
ICON_WORLD = 0, ICON_CLUSTER,
ICON_HOST_STARTED, ICON_HOST_STOPPED, ICON_HOST_CONVERGING, ICON_HOST_SUSPENDED, ICON_HOST_DRAINING, ICON_HOST_DISCONNECTED,
ICON_PORTRULE, ICON_PENDING,
ICON_INFORMATIONAL, ICON_WARNING, ICON_ERROR,
ICON_CLUSTER_OK, ICON_CLUSTER_PENDING, ICON_CLUSTER_BROKEN,
ICON_HOST_OK, ICON_HOST_PENDING, ICON_HOST_MISCONFIGURED, ICON_HOST_UNREACHABLE, ICON_HOST_UNKNOWN };
enum ListViewColumnSize { LV_COLUMN_MINSCULE = 20, LV_COLUMN_TINY = 60, LV_COLUMN_SMALL = 70, LV_COLUMN_SMALLMEDIUM = 75, LV_COLUMN_MEDIUM = 80, LV_COLUMN_LARGE = 90, LV_COLUMN_LARGE2 = 160, LV_COLUMN_VERYLARGE = 200, LV_COLUMN_GIGANTIC = 500 };
// constructor
Document(); // destructor
virtual ~Document();
//
// ------------------------------- overrides for IUICallbacks ----------
//
//
// Asks the user to update user-supplied info about a host.
//
BOOL virtual Document::UpdateHostInformation( IN BOOL fNeedCredentials, IN BOOL fNeedConnectionString, IN OUT CHostSpec& host );
//
// Log a message in human-readable form.
//
virtual void Log( IN LogEntryType Type, IN const wchar_t *szCluster, OPTIONAL IN const wchar_t *szHost, OPTIONAL IN UINT ResourceID, ... );
virtual void LogEx( IN const LogEntryHeader *pHeader, IN UINT ResourceID, ... );
//
// Handle an event relating to a specific instance of a specific
// object type.
//
virtual void HandleEngineEvent( IN ObjectType objtype, IN ENGINEHANDLE ehClusterId, // could be NULL
IN ENGINEHANDLE ehObjId, IN EventCode evt );
//
// Handle a selection change notification from the left (tree) view
//
void HandleLeftViewSelChange( IN IUICallbacks::ObjectType objtype, IN ENGINEHANDLE ehObjId );
// ------------------------------- END overrides for IUICallbacks ----------
void registerLeftView(LeftView *pLeftView);
void registerLogView(LogView *pLogView);
void registerDetailsView(DetailsView *pDetailsView);
void LoadHostsFromFile(_bstr_t &FileName);
VOID getDefaultCredentials( OUT _bstr_t &bstrUserName, OUT _bstr_t &bstrPassword ) { bstrUserName = m_bstrDefaultUserName; bstrPassword = m_bstrDefaultPassword; }
VOID setDefaultCredentials( IN LPCWSTR szUserName, IN LPCWSTR szPassword ) { m_bstrDefaultUserName = _bstr_t(szUserName); m_bstrDefaultPassword = _bstr_t(szPassword); }
void HandleDeferedUIWorkItem(CUIWorkItem *pWorkItem);
CImageList* m_images48x48;
//
// Logging support
//
enum LOG_RESULT { STARTED=0, ALREADY, NOT_ENABLED, NO_FILE_NAME, FILE_NAME_TOO_LONG, IO_ERROR, REG_IO_ERROR, FILE_PATH_INVALID, FILE_TOO_LARGE }; inline bool isLoggingEnabled() { return (m_dwLoggingEnabled != 0); } inline bool isCurrentlyLogging() { return (NULL != m_hStatusLog); } Document::LOG_RESULT initLogging(); LONG enableLogging(); LONG disableLogging(); Document::LOG_RESULT startLogging(); bool stopLogging(); void getLogfileName(WCHAR* pszFileName, DWORD dwBufLen); LONG setLogfileName(WCHAR* pszFileName); void logStatus(WCHAR* pszStatus); bool isDirectoryValid(WCHAR* pszFileName); // End logging support
void SetFocusNextView(CWnd* pWnd, UINT nChar); void SetFocusPrevView(CWnd* pWnd, UINT nChar);
virtual void OnCloseDocument();
VOID PrepareToClose(BOOL fBlock);
private:
//
// Attempts to defer the specified operation by posting the operation
// to the application's message queue where it will be picked up and
// processed later. Returns TRUE IFF the operation has been posted
// successfully. The caller should delete pWorkItem IFF the function
// returns FALSE.
//
BOOL mfn_DeferUIOperation(CUIWorkItem *pWorkItem);
LeftView *m_pLeftView; DetailsView *m_pDetailsView; LogView *m_pLogView; CNlbEngine *m_pNlbEngine; DWORD m_dwLoggingEnabled; WCHAR m_szLogFileName[MAXFILEPATHLEN]; FILE *m_hStatusLog; BOOL m_fPrepareToDeinitialize;
enum VIEWTYPE { NO_VIEW = 0, LEFTVIEW, DETAILSVIEW, LOGVIEW };
VIEWTYPE GetViewType(CWnd* pWnd); // Matches the CWnd* to that of the defined views
#if OBSOLETE
void LoadHost(WMI_CONNECTION_INFO *pConnInfo); #endif // OBSOLETE
_bstr_t m_bstrDefaultUserName; _bstr_t m_bstrDefaultPassword; // TODO Security audit of this practise!!!!!
};
#endif
|