175 lines
3.6 KiB
C++
175 lines
3.6 KiB
C++
/*++
|
|
|
|
Copyright (C) 1997-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
MAINTOBJ.H
|
|
|
|
Abstract:
|
|
|
|
Declares the MaintObj class.
|
|
|
|
History:
|
|
|
|
a-davj 24-Sep-97 Created.
|
|
|
|
--*/
|
|
|
|
#ifndef _MaintObj_H_
|
|
#define _MaintObj_H_
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// ComEntry
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// This is just a self initializing structure which keeps track of
|
|
// a single CComLink object
|
|
//***************************************************************************
|
|
|
|
class ComEntry
|
|
{
|
|
public:
|
|
|
|
ComEntry ( CComLink * pComLink )
|
|
{
|
|
m_ComLink = pComLink;
|
|
m_FirstPingTime = 0;
|
|
} ;
|
|
|
|
~ComEntry(){};
|
|
|
|
CComLink *m_ComLink ;
|
|
|
|
DWORD m_FirstPingTime;
|
|
};
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// EventEntry
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// This is just a self clearing structure which keeps track of
|
|
// a single event object
|
|
//***************************************************************************
|
|
|
|
class EventEntry
|
|
{
|
|
public:
|
|
|
|
EventEntry ( HANDLE a_AsynchronousEventHandle )
|
|
{
|
|
m_AsynchronousEventHandle = a_AsynchronousEventHandle ;
|
|
m_DeleteASAP = FALSE;
|
|
} ;
|
|
|
|
~EventEntry()
|
|
{
|
|
if ( m_AsynchronousEventHandle )
|
|
CloseHandle ( m_AsynchronousEventHandle ) ;
|
|
};
|
|
|
|
HANDLE m_AsynchronousEventHandle ;
|
|
|
|
BOOL m_DeleteASAP ;
|
|
};
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// LockOut
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// A trivial class whose only purpose is to provide a simple way of making
|
|
// routines thread safe. See some of the code in MaintObj.cpp for examples
|
|
// of its use.
|
|
//***************************************************************************
|
|
|
|
class LockOut
|
|
{
|
|
public:
|
|
|
|
LockOut ( CRITICAL_SECTION &cs ) ;
|
|
~LockOut () ;
|
|
|
|
private:
|
|
|
|
CRITICAL_SECTION *m_cs ;
|
|
};
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// MaintObj
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// Keeps track of the CComLink objects.
|
|
//***************************************************************************
|
|
|
|
class MaintObj : public IComLinkNotification
|
|
{
|
|
private:
|
|
|
|
ComEntry *FindEntry ( CComLink *pComLink , int & iFind ) ;
|
|
ComEntry *UnLockedFindEntry ( CComLink *pComLink , int & iFind ) ;
|
|
|
|
CFlexArray m_ComLinkContainer ; // holds list of CComLink objects
|
|
|
|
CFlexArray m_EventContainer ; // Some CComlink ojbects have async notifiy events.
|
|
|
|
HANDLE m_ChangeEvent ;
|
|
HANDLE m_ClientThreadHandle ;
|
|
HANDLE m_ClientThreadStartedEvent ;
|
|
|
|
BOOL m_ClientRole ;
|
|
|
|
CRITICAL_SECTION m_cs;
|
|
|
|
public:
|
|
|
|
MaintObj ( BOOL a_Client ) ;
|
|
~MaintObj () ;
|
|
|
|
SCODE AddComLink ( CComLink *a_ComLink ) ;
|
|
|
|
SCODE UnLockedShutDownComlink ( CComLink *a_ComLink ) ;
|
|
SCODE ShutDownComlink ( CComLink *a_ComLink ) ;
|
|
SCODE UnLockedShutDownAllComlinks () ;
|
|
SCODE ShutDownAllComlinks () ;
|
|
|
|
void UnLockedIndicate ( CComLink *a_ComLink ) ;
|
|
void Indicate ( CComLink *a_ComLink ) ;
|
|
|
|
SCODE CheckForHungConnections () ;
|
|
SCODE SendHeartBeats () ;
|
|
|
|
CComLink *GetSocketComLink ( SOCKET a_Socket ) ;
|
|
|
|
HRESULT StartClientThreadIfNeeded();
|
|
|
|
void ServiceEvent ( HANDLE hEvent ) ;
|
|
|
|
HANDLE *GetEvents ( HANDLE a_TerminateHandle , int &a_EventContainerSize , DWORD &a_Timeout ) ;
|
|
|
|
HANDLE GetThreadHandle () { return m_ClientThreadHandle ; }
|
|
BOOL ClientRole () ;
|
|
|
|
CRITICAL_SECTION *GetCriticalSection () { return &m_cs ; }
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|