windows-nt/Source/XPSP1/NT/base/fs/hsm/job/hsmsess.h
2020-09-26 16:20:57 +08:00

151 lines
5.3 KiB
C++

#ifndef _HSMSESS_
#define _HSMSESS_
/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
hsmsess.h
Abstract:
This module contains the session component. The session is the collator of information for the work being done on
a resource (for a job, demand recall, truncate, ...).
Author:
Chuck Bardeen [cbardeen] 18-Feb-1997
Revision History:
--*/
#include "resource.h" // main symbols
#include "wsb.h"
#include "fsa.h"
#include "job.h"
/*++
Class Name:
CHsmSession
Class Description:
The session is the collator of information for the work being done on a resource (for a job, demand recall,
truncate, ...).
--*/
class CHsmSession :
public CWsbObject,
public IHsmSession,
public CComCoClass<CHsmSession,&CLSID_CHsmSession>,
public IConnectionPointContainerImpl<CHsmSession>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkEveryEvent, CComDynamicUnkArray>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkEveryItem, CComDynamicUnkArray>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkEveryMediaState, CComDynamicUnkArray>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkEveryPriority, CComDynamicUnkArray>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkEveryState, CComDynamicUnkArray>,
public IConnectionPointImpl<CHsmSession, &IID_IHsmSessionSinkSomeItems, CComDynamicUnkArray>
{
public:
CHsmSession() {}
BEGIN_COM_MAP(CHsmSession)
COM_INTERFACE_ENTRY(IHsmSession)
COM_INTERFACE_ENTRY2(IPersist, IPersistStream)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IWsbCollectable)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IWsbTestable)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CHsmSession)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkEveryEvent)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkEveryItem)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkEveryMediaState)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkEveryPriority)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkEveryState)
CONNECTION_POINT_ENTRY(IID_IHsmSessionSinkSomeItems)
END_CONNECTION_POINT_MAP()
DECLARE_REGISTRY_RESOURCEID(IDR_CHsmSession)
// CComObjectRoot
public:
STDMETHOD(FinalConstruct)(void);
void FinalRelease(void);
// IPersist
public:
STDMETHOD(GetClassID)(LPCLSID pClsid);
// IPersistStream
public:
STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize);
STDMETHOD(Load)(IStream* pStream);
STDMETHOD(Save)(IStream* pStream, BOOL clearDirty);
// CHsmSession
STDMETHOD(AdviseOfEvent)(HSM_JOB_PHASE phase, HSM_JOB_EVENT event);
STDMETHOD(AdviseOfItem)(IHsmPhase* pPhase, IFsaScanItem* pScanItem, HRESULT hrItem, IHsmSessionTotals* pSessionTotals);
STDMETHOD(AdviseOfMediaState)(IHsmPhase* pPhase, HSM_JOB_MEDIA_STATE state, OLECHAR* mediaName, HSM_JOB_MEDIA_TYPE mediaType, ULONG time);
STDMETHOD(AdviseOfPriority)(IHsmPhase* pPhase);
STDMETHOD(AdviseOfState)(IHsmPhase* pPhase, OLECHAR* currentPath);
// IWsbTestable
public:
STDMETHOD(Test)(USHORT *passed, USHORT* failed);
// IHsmSession
public:
STDMETHOD(Cancel)(HSM_JOB_PHASE phase);
STDMETHOD(EnumPhases)(IWsbEnum** ppEnum);
STDMETHOD(EnumTotals)(IWsbEnum** ppEnum);
STDMETHOD(GetAdviseInterval)(LONGLONG* pFiletimeTicks);
STDMETHOD(GetHsmId)(GUID* pId);
STDMETHOD(GetIdentifier)(GUID* pId);
STDMETHOD(GetJob)(IHsmJob** pJob);
STDMETHOD(GetName)(OLECHAR** pName, ULONG bufferSize);
STDMETHOD(GetResource)(IFsaResource** pResource);
STDMETHOD(GetRunId)(ULONG* pRunId);
STDMETHOD(GetSubRunId)(ULONG* pRunId);
STDMETHOD(IsCanceling)(void);
STDMETHOD(Pause)(HSM_JOB_PHASE phase);
STDMETHOD(ProcessEvent)(HSM_JOB_PHASE phase, HSM_JOB_EVENT event);
STDMETHOD(ProcessHr)(HSM_JOB_PHASE phase, CHAR* file, ULONG line, HRESULT hr);
STDMETHOD(ProcessItem)(HSM_JOB_PHASE phase, HSM_JOB_ACTION action, IFsaScanItem* pScanItem, HRESULT hrItem);
STDMETHOD(ProcessMediaState)(HSM_JOB_PHASE phase, HSM_JOB_MEDIA_STATE state, OLECHAR* mediaName, HSM_JOB_MEDIA_TYPE mediaType, ULONG time);
STDMETHOD(ProcessPriority)(HSM_JOB_PHASE phase, HSM_JOB_PRIORITY priority);
STDMETHOD(ProcessState)(HSM_JOB_PHASE phase, HSM_JOB_STATE state, OLECHAR* currentPath, BOOL bLog);
STDMETHOD(ProcessString)(HSM_JOB_PHASE phase, OLECHAR* string);
STDMETHOD(Resume)(HSM_JOB_PHASE phase);
STDMETHOD(SetAdviseInterval)(LONGLONG filetimeTicks);
STDMETHOD(Start)(OLECHAR* name, ULONG logControl, GUID hsmId, IHsmJob* pJob, IFsaResource* pResource, ULONG runId, ULONG subRunId);
STDMETHOD(Suspend)(HSM_JOB_PHASE phase);
protected:
GUID m_id;
CWsbStringPtr m_name;
GUID m_hsmId;
LONGLONG m_adviseInterval;
ULONG m_runId;
ULONG m_subRunId;
FILETIME m_lastAdviseFile;
HSM_JOB_STATE m_state;
ULONG m_activePhases;
ULONG m_logControl;
CComPtr<IHsmJob> m_pJob;
CComPtr<IFsaResource> m_pResource;
CComPtr<IWsbCollection> m_pPhases;
CComPtr<IWsbCollection> m_pTotals;
BOOL m_isCanceling;
};
#endif // _HSMSESS_