/* Copyright (c) 1998-1999 Microsoft Corporation Module Name: blbtime.h Abstract: Definition of the TIME class Author: */ #if !defined(AFX_BLBTIME_H__0CC1F05A_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_) #define AFX_BLBTIME_H__0CC1F05A_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "resource.h" // main symbols #include "sdpblb.h" #include "blbcoen.h" ///////////////////////////////////////////////////////////////////////////// // Time const USHORT MAX_NTP_TIME_STRLEN = 10; const SHORT FIRST_POSSIBLE_YEAR = 1970; const DWORD NTP_OFFSET = 0x83aa7e80; // return the current Ntp time inline DWORD_PTR GetCurrentNtpTime( ) { return (time(NULL) + NTP_OFFSET); } class ATL_NO_VTABLE TIME : public ENUM_ELEMENT<SDP_TIME>, public CComObjectRootEx<CComObjectThreadModel>, public CComDualImpl<ITTime, &IID_ITTime, &LIBID_SDPBLBLib>, public CObjectSafeImpl { friend class MY_COLL_IMPL<TIME>; public: typedef ITTime ELEM_IF; typedef IEnumTime ENUM_IF; typedef ITTimeCollection COLL_IF; typedef SDP_TIME SDP_TYPE; typedef SDP_TIME_LIST SDP_LIST; static const IID &ELEM_IF_ID; public: inline TIME(); inline ~TIME(); inline HRESULT FinalConstruct(void); HRESULT Init( IN CSdpConferenceBlob &ConfBlob ); HRESULT Init( IN CSdpConferenceBlob &ConfBlob, IN DWORD StartTime, IN DWORD StopTime ); inline void SuccessInit( IN CSdpConferenceBlob &ConfBlob, IN SDP_TIME &SdpTime ); inline void ClearSdpBlobRefs(); BEGIN_COM_MAP(TIME) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ITTime) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(TIME) DECLARE_GET_CONTROLLING_UNKNOWN() // ITTime public: STDMETHOD(get_StopTime)(/*[out, retval]*/ DOUBLE *pTime); STDMETHOD(put_StopTime)(/*[in]*/ DOUBLE Time); STDMETHOD(get_StartTime)(/*[out, retval]*/ DOUBLE *pTime); STDMETHOD(put_StartTime)(/*[in]*/ DOUBLE Time); protected: CSdpConferenceBlob * m_ConfBlob; IUnknown * m_pFTM; // pointer to the free threaded marshaler }; inline TIME::TIME( ) : m_ConfBlob(NULL), m_pFTM(NULL) { } inline HRESULT TIME::FinalConstruct(void) { HRESULT HResult = CoCreateFreeThreadedMarshaler( GetControllingUnknown(), & m_pFTM ); if ( FAILED(HResult) ) { return HResult; } return S_OK; } inline TIME::~TIME() { if ( m_pFTM ) { m_pFTM->Release(); } } inline void TIME::SuccessInit( IN CSdpConferenceBlob &ConfBlob, IN SDP_TIME &SdpTime ) { m_ConfBlob = &ConfBlob; // don't free the sdptime instance on destruction ENUM_ELEMENT<SDP_TIME>::SuccessInit(SdpTime, FALSE); } inline void TIME::ClearSdpBlobRefs( ) { m_ConfBlob = NULL; } #endif // !defined(AFX_BLBTIME_H__0CC1F05A_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_)