Source code of Windows XP (NT5)
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.
|
|
// 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); }
|