mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
3.5 KiB
189 lines
3.5 KiB
// File: confman.cpp
|
|
//
|
|
// Conference Manager
|
|
|
|
#include "precomp.h"
|
|
|
|
#include "conf.h"
|
|
#include "confroom.h"
|
|
#include "confman.h"
|
|
|
|
#include "cr.h" // for CreateConfRoom
|
|
#include "call.h" // for OnUICallCreated
|
|
|
|
CConfMan * CConfMan::m_pConfMan = NULL; // There is only one of these
|
|
|
|
static const UINT g_cuShutdownMsgTimeout = 0x7FFFFFFF; // milliseconds
|
|
|
|
|
|
/* C C O N F M A N */
|
|
/*-------------------------------------------------------------------------
|
|
%%Function: CConfMan
|
|
|
|
-------------------------------------------------------------------------*/
|
|
CConfMan::CConfMan(INmManager2 *pManager) :
|
|
RefCount(NULL),
|
|
m_pManager(pManager)
|
|
{
|
|
m_pConfMan = this;
|
|
|
|
ASSERT(NULL != m_pManager);
|
|
|
|
NmAdvise(m_pManager, (INmManagerNotify*)this, IID_INmManagerNotify, &m_dwCookie);
|
|
m_pManager->AddRef();
|
|
|
|
DbgMsg(iZONE_OBJECTS, "Obj: %08X created CConfMan", this);
|
|
}
|
|
|
|
CConfMan::~CConfMan()
|
|
{
|
|
ASSERT(NULL == m_pManager);
|
|
m_pConfMan = NULL;
|
|
|
|
DbgMsg(iZONE_OBJECTS, "Obj: %08X destroyed CConfMan", this);
|
|
}
|
|
|
|
BOOL CConfMan::FCreate(INmManager2 *pManager)
|
|
{
|
|
if (NULL != m_pConfMan)
|
|
return FALSE; // already created
|
|
|
|
m_pConfMan = new CConfMan(pManager);
|
|
if (NULL == m_pConfMan)
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
VOID CConfMan::Destroy(void)
|
|
{
|
|
if (NULL == m_pConfMan)
|
|
return;
|
|
|
|
m_pConfMan->CleanUp();
|
|
|
|
// we should only have one more lock on this object
|
|
m_pConfMan->Release();
|
|
// so this will be cleared in the destructor
|
|
ASSERT(NULL == m_pConfMan);
|
|
}
|
|
|
|
VOID CConfMan::CleanUp(void)
|
|
{
|
|
if (NULL != m_pManager)
|
|
{
|
|
NmUnadvise(m_pManager, IID_INmManagerNotify, m_dwCookie);
|
|
|
|
CConfRoom* pcr = ::GetConfRoom();
|
|
if (NULL != pcr)
|
|
{
|
|
pcr->CleanUp();
|
|
}
|
|
|
|
m_pManager->Release();
|
|
m_pManager = NULL;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/* G E T N M M A N A G E R */
|
|
/*-------------------------------------------------------------------------
|
|
%%Function: GetNmManager
|
|
|
|
-------------------------------------------------------------------------*/
|
|
INmManager2 * CConfMan::GetNmManager()
|
|
{
|
|
if (NULL == m_pConfMan)
|
|
return NULL;
|
|
|
|
INmManager2 * pManager = m_pConfMan->GetINmManager();
|
|
if (NULL != pManager)
|
|
{
|
|
pManager->AddRef();
|
|
}
|
|
return pManager;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// IUnknown
|
|
|
|
STDMETHODIMP_(ULONG) CConfMan::AddRef(void)
|
|
{
|
|
return RefCount::AddRef();
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) CConfMan::Release(void)
|
|
{
|
|
return RefCount::Release();
|
|
}
|
|
|
|
STDMETHODIMP CConfMan::QueryInterface(REFIID riid, PVOID *ppv)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
if ((riid == IID_INmManagerNotify) || (riid == IID_IUnknown))
|
|
{
|
|
*ppv = (INmManagerNotify *)this;
|
|
ApiDebugMsg(("CConfMan::QueryInterface()"));
|
|
}
|
|
else
|
|
{
|
|
hr = E_NOINTERFACE;
|
|
*ppv = NULL;
|
|
ApiDebugMsg(("CConfMan::QueryInterface(): Called on unknown interface."));
|
|
}
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
AddRef();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// INmManagerNotify
|
|
|
|
STDMETHODIMP CConfMan::NmUI(CONFN uNotify)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CConfMan::ConferenceCreated(INmConference *pConference)
|
|
{
|
|
CConfRoom * m_pConfRoom = ::GetConfRoom();
|
|
ASSERT(NULL != m_pConfRoom);
|
|
|
|
if(_Module.IsUIActive())
|
|
{
|
|
m_pConfRoom->BringToFront();
|
|
}
|
|
|
|
return m_pConfRoom->OnConferenceCreated(pConference);
|
|
}
|
|
|
|
STDMETHODIMP CConfMan::CallCreated(INmCall *pCall)
|
|
{
|
|
OnUICallCreated(pCall);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
VOID CConfMan::AllowAV(BOOL fAllowAV)
|
|
{
|
|
CConfMan * pConfMan = CConfMan::GetInstance();
|
|
if (NULL == pConfMan)
|
|
return;
|
|
|
|
INmManager2 * pManager = pConfMan->GetINmManager();
|
|
if (NULL == pManager)
|
|
return;
|
|
|
|
pManager->AllowH323(fAllowAV);
|
|
}
|
|
|