//
// MODULE: DirMonitor.h
//
// PURPOSE: Monitor changes to LST, DSC, HTI, BES files.
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Joe Mabel
//
// ORIGINAL DATE: 9-17-98
//
// NOTES:
// 1. It would be equally appropriate for CDirectoryMonitor to inherit from CTopicShop
// instead of having a member of type CDirectoryMonitor. Really an arbitrary choice.
//
// Version Date By Comments
//--------------------------------------------------------------------
// V3.0 09-17-98 JM
//
#if !defined(AFX_DIRMONITOR_H__493CF34D_4E79_11D2_95F8_00C04FC22ADD__INCLUDED_)
#define AFX_DIRMONITOR_H__493CF34D_4E79_11D2_95F8_00C04FC22ADD__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "TopicShop.h"
#include "FileTracker.h"
class CTopicFileTracker: public CFileTracker
{
private:
CTopicInfo m_topicinfo;
public:
CTopicFileTracker();
~CTopicFileTracker();
void AddTopicInfo(const CTopicInfo & topicinfo);
const CTopicInfo & GetTopicInfo() const;
};
class CTemplateFileTracker: public CFileTracker
{
private:
CString m_strTemplateName;
public:
CTemplateFileTracker();
~CTemplateFileTracker();
void AddTemplateName( const CString & strTemplateName );
const CString& GetTemplateName() const;
};
const CString k_strErrorTemplateFileName = _T("ErrorTemplate.hti");
const CString k_strDefaultErrorTemplateBefore =
_T("
AP GTS Error")
_T("AP GTS reports an Error
");
const CString k_strErrorTemplateKey = _T("$Error");
const CString k_strDefaultErrorTemplateAfter = _T("");
class CDirectoryMonitor : public CStateless
{
public:
enum ThreadStatus{eBeforeInit, eFail, eWaitDirPath, eWaitChange, eWaitSettle,
eRun, eBeforeWaitChange, eExiting};
static CString ThreadStatusText(ThreadStatus ts);
private:
CTopicShop & m_TopicShop;
CSimpleTemplate * m_pErrorTemplate; // template for reporting error messages (regardless
// of topic)
CString m_strDirPath; // Directory to monitor
bool m_bDirPathChanged;
CString m_strLstPath; // LST file (always in directory m_strDirPath)
CString m_strErrorTemplatePath; // Error template file (always in directory m_strDirPath)
CFileTracker * m_pTrackLst;
CFileTracker * m_pTrackErrorTemplate;
vector m_arrTrackTopic;
vector m_arrTrackTemplate;
CAPGTSLSTReader * m_pLst; // current LST file contents
HANDLE m_hThread;
HANDLE m_hevMonitorRequested; // event to wake up DirectoryMonitorTask
// this allows it to be wakened other than
// by the directory change event. Currently used
// for shutdown or change of directory.
HANDLE m_hevThreadIsShut; // event just to indicate exit of DirectoryMonitorTask thread
bool m_bShuttingDown; // lets topic directory monitor thread know we're shutting down
DWORD m_secsReloadDelay; // number of second to let directory "settle down"
// before we start to update topics.
DWORD m_dwErr; // status from starting the thread
ThreadStatus m_ThreadStatus;
time_t m_time; // time last changed ThreadStatus. Initialized
// to zero ==> unknown
CString m_strTopicName; // This string is ignored in the Online Troubleshooter.
// Done under the guise of binary compatibility.
public:
CDirectoryMonitor(CTopicShop & TopicShop, const CString& strTopicName ); // strTopicName is ignored in the Online Troubleshooter.
// Done under the guise of binary compatibility.
~CDirectoryMonitor();
void SetReloadDelay(DWORD secsReloadDelay);
void SetResourceDirectory(const CString & strDirPath);
void CreateErrorPage(const CString & strError, CString& out) const;
DWORD GetStatus(ThreadStatus &ts, DWORD & seconds) const;
void AddTemplateToTrack( const CString& strTemplateName );
private:
CDirectoryMonitor(); // do not instantiate
void SetThreadStatus(ThreadStatus ts);
// just for use by own destructor
void ShutDown();
// functions for use by the DirectoryMonitorTask thread.
void Monitor();
void LstFileDrivesTopics();
void ReadErrorTemplate();
void AckShutDown();
// main function of the DirectoryMonitorTask thread.
static UINT WINAPI DirectoryMonitorTask(LPVOID lpParams);
};
#endif // !defined(AFX_DIRMONITOR_H__493CF34D_4E79_11D2_95F8_00C04FC22ADD__INCLUDED_)