windows-nt/Source/XPSP1/NT/net/tapi/skywalker/inc/multitrackterminal.h

166 lines
3.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// MultiTrackTerminal.h: interface for the CMultiTrackTerminal class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(_MULTITRACKTERMINAL_DOT_H_INCLUDED_)
#define _MULTITRACKTERMINAL_DOT_H_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
template <class T>
class ITMultiTrackTerminalVtbl : public ITMultiTrackTerminal
{
};
class CMultiTrackTerminal;
typedef IDispatchImpl<ITMultiTrackTerminalVtbl<CMultiTrackTerminal>, &IID_ITMultiTrackTerminal, &LIBID_TAPI3Lib> CTMultiTrack;
class CMultiTrackTerminal :
public CComObjectRootEx<CComMultiThreadModel>,
public CTMultiTrack
{
public:
BEGIN_COM_MAP(CMultiTrackTerminal)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ITMultiTrackTerminal)
END_COM_MAP()
//
// the logic for creating a track terminal needs to be implemented by the
// specific terminals, so this is a pure virtual method
//
virtual HRESULT STDMETHODCALLTYPE CreateTrackTerminal(
IN long MediaType,
IN TERMINAL_DIRECTION TerminalDirection,
OUT ITTerminal **ppTerminal
) = 0;
public:
virtual HRESULT STDMETHODCALLTYPE get_TrackTerminals(
OUT VARIANT *pVariant
);
virtual HRESULT STDMETHODCALLTYPE EnumerateTrackTerminals(
IEnumTerminal **ppEnumTerminal
);
virtual HRESULT STDMETHODCALLTYPE get_MediaTypesInUse(
OUT long *plMediaTypesInUse
);
virtual HRESULT STDMETHODCALLTYPE get_DirectionsInUse(
OUT TERMINAL_DIRECTION *plDirectionsInUsed
);
virtual HRESULT STDMETHODCALLTYPE RemoveTrackTerminal(
IN ITTerminal *pTrackTerminalToRemove
);
public:
CMultiTrackTerminal();
virtual ~CMultiTrackTerminal();
protected:
HRESULT AddTrackTerminal(ITTerminal *pTrackTerminalToAdd);
HRESULT ReleaseAllTracks();
//
// a helper method that returns true if the terminal is in the list of managed tracks
//
BOOL DoIManageThisTrack(ITTerminal *pTrackInQuestion)
{
CLock lock(m_lock);
int nIndex = m_TrackTerminals.Find(pTrackInQuestion);
return (nIndex >= 0);
}
//
// returns the number of tracks managed by this terminal
//
int CountTracks();
public:
//
// the derived class, CComObject, implements these. Here declare as pure
// virtual so we can refer to these methods from ChildRelease and
// ChildAddRef()
//
virtual ULONG STDMETHODCALLTYPE AddRef() = 0;
virtual ULONG STDMETHODCALLTYPE Release() = 0;
//
// called by a track terminals when they are addref'ed or released
//
virtual void ChildAddRef();
virtual void ChildRelease();
protected:
//
// we have to adjust refcount with the information on the number of tracks that we are managing
//
ULONG InternalAddRef();
ULONG InternalRelease();
protected:
//
// collection of track terminals
//
CMSPArray<ITTerminal*> m_TrackTerminals;
protected:
//
// critical section.
//
CMSPCritSection m_lock;
private:
//
// this data member is used to keep the count of the tracks managed by this
// terminal
//
int m_nNumberOfTracks;
};
#endif // !defined(_MULTITRACKTERMINAL_DOT_H_INCLUDED_)