570 lines
13 KiB
C++
570 lines
13 KiB
C++
#include "precomp.h"
|
|
|
|
// Net Meeting SDK includes
|
|
#include "NmManager.h"
|
|
#include "NmConference.h"
|
|
#include "NmCall.h"
|
|
#include "NmSharableApp.h"
|
|
#include "NmChannelAppShare.h"
|
|
#include "SDKWindow.h"
|
|
|
|
|
|
|
|
CSDKWindow* CSDKWindow::ms_pSDKWnd = NULL;
|
|
int CSDKWindow::ms_NumUnlocks = 0;
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// Construction / destruction / initialization
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::InitSDK()
|
|
{
|
|
DBGENTRY(CSDKWindow::InitSDK);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(NULL == ms_pSDKWnd);
|
|
|
|
ms_pSDKWnd = new CSDKWindow();
|
|
if(ms_pSDKWnd)
|
|
{
|
|
// Create the window
|
|
RECT rc;
|
|
ms_pSDKWnd->Create(NULL, rc, NULL, WS_POPUP);
|
|
if(!ms_pSDKWnd->IsWindow())
|
|
{
|
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
|
|
DBGEXIT_HR(CSDKWindow::InitSDK,hr);
|
|
return hr;
|
|
|
|
}
|
|
//static
|
|
void CSDKWindow::CleanupSDK()
|
|
{
|
|
if(ms_pSDKWnd && ms_pSDKWnd->IsWindow())
|
|
{
|
|
ms_pSDKWnd->DestroyWindow();
|
|
}
|
|
|
|
delete ms_pSDKWnd;
|
|
}
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostDelayModuleUnlock()
|
|
{
|
|
if(ms_pSDKWnd)
|
|
{
|
|
if(!ms_pSDKWnd->SetTimer(DELAY_UNLOAD_TIMER, DELAY_UNLOAD_INTERVAL))
|
|
{
|
|
return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
++ms_NumUnlocks;
|
|
return S_OK;
|
|
}
|
|
|
|
return E_FAIL;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmManagerNotify Posting functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostConferenceCreated(CNmManagerObj* pMgr, INmConference* pInternalNmConference)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostConferenceCreated);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pMgr);
|
|
|
|
pMgr->AddRef();
|
|
|
|
if(pInternalNmConference)
|
|
{
|
|
pInternalNmConference->AddRef();
|
|
}
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CONFERENCE_CREATED, reinterpret_cast<WPARAM>(pMgr), reinterpret_cast<LPARAM>(pInternalNmConference));
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostConferenceCreated,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostCallCreated(CNmManagerObj* pMgr, INmCall* pInternalNmCall)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostCallCreated);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pMgr);
|
|
|
|
pMgr->AddRef();
|
|
|
|
if(pInternalNmCall)
|
|
{
|
|
pInternalNmCall->AddRef();
|
|
}
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CALL_CREATED, reinterpret_cast<WPARAM>(pMgr), reinterpret_cast<LPARAM>(pInternalNmCall));
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostCallCreated,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostManagerNmUI(CNmManagerObj* pMgr, CONFN uNotify)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostManagerNmUI);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pMgr);
|
|
|
|
pMgr->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_MANAGER_NMUI, reinterpret_cast<WPARAM>(pMgr), uNotify);
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostManagerNmUI,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmConferenceNotify Posting functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
HRESULT CSDKWindow::PostConferenceNmUI(CNmConferenceObj* pConf, CONFN uNotify)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostConferenceNmUI);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pConf);
|
|
|
|
pConf->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CONFERENCE_NMUI, reinterpret_cast<WPARAM>(pConf), uNotify);
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostConferenceNmUI,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostConferenceStateChanged(CNmConferenceObj* pConference, NM_CONFERENCE_STATE uState)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostConferenceStateChanged);
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pConference);
|
|
|
|
pConference->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CONFERENCE_STATE_CHANGED, reinterpret_cast<WPARAM>(pConference), uState);
|
|
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostConferenceStateChanged,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostConferenceMemberChanged(CNmConferenceObj* pConf, NM_MEMBER_NOTIFY uNotify, INmMember *pMember)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostConferenceMemberChanged);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pConf);
|
|
|
|
pConf->AddRef();
|
|
|
|
if(pMember)
|
|
{
|
|
pMember->AddRef();
|
|
}
|
|
|
|
ConferenceMemberChanged *pParams = new ConferenceMemberChanged;
|
|
pParams->uNotify = uNotify;
|
|
pParams->pMember = pMember;
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CONFERENCE_MEMBER_CHANGED, reinterpret_cast<WPARAM>(pConf), reinterpret_cast<LPARAM>(pParams));
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostConferenceMemberChanged,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostConferenceChannelChanged(CNmConferenceObj* pConf, NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostConferenceChannelChanged);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pConf);
|
|
|
|
pConf->AddRef();
|
|
|
|
if(pChannel)
|
|
{
|
|
pChannel->AddRef();
|
|
}
|
|
|
|
ConferenceChannelChanged *pParams = new ConferenceChannelChanged;
|
|
pParams->uNotify = uNotify;
|
|
pParams->pChannel = pChannel;
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CONFERENCE_CHANNEL_CHANGED, reinterpret_cast<WPARAM>(pConf), reinterpret_cast<LPARAM>(pParams));
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostConferenceChannelChanged,hr);
|
|
return hr;
|
|
}
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostStateChanged(CNmChannelAppShareObj* pAppShareChan, NM_SHAPP_STATE uNotify, INmSharableApp *pApp)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pAppShareChan);
|
|
ASSERT(pApp);
|
|
|
|
pAppShareChan->AddRef();
|
|
pApp->AddRef();
|
|
|
|
StateChanged* pParams = new StateChanged;
|
|
pParams->uNotify = uNotify;
|
|
pParams->pApp = pApp;
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_STATE_CHANGED, reinterpret_cast<WPARAM>(pAppShareChan), reinterpret_cast<LPARAM>(pParams));
|
|
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmCallNotify Posting functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostCallStateChanged(CNmCallObj* pCall, NM_CALL_STATE uState)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostCallStateChanged);
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pCall);
|
|
|
|
pCall->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_CALL_STATE_CHANGED, reinterpret_cast<WPARAM>(pCall), uState);
|
|
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostCallStateChanged,hr);
|
|
return hr;
|
|
}
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostCallNmUi(CNmCallObj* pCall, CONFN uNotify)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostCallNmUi);
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pCall);
|
|
|
|
pCall->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_NMUI, reinterpret_cast<WPARAM>(pCall), uNotify);
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostCallNmUi,hr);
|
|
return hr;
|
|
}
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostFailed(CNmCallObj* pCall, ULONG uError)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostFailed);
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pCall);
|
|
|
|
pCall->AddRef();
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_FAILED, reinterpret_cast<WPARAM>(pCall), uError);
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostFailed,hr);
|
|
return hr;
|
|
}
|
|
|
|
//static
|
|
HRESULT CSDKWindow::PostAccepted(CNmCallObj* pCall, INmConference* pConference)
|
|
{
|
|
DBGENTRY(CSDKWindow::PostAccepted);
|
|
HRESULT hr = S_OK;
|
|
ASSERT(ms_pSDKWnd);
|
|
ASSERT(pCall);
|
|
|
|
pCall->AddRef();
|
|
if(pConference)
|
|
{
|
|
pConference->AddRef();
|
|
}
|
|
|
|
ms_pSDKWnd->PostMessage(WM_APP_NOTIFY_ACCEPTED, reinterpret_cast<WPARAM>(pCall), reinterpret_cast<LPARAM>(pConference));
|
|
|
|
DBGEXIT_HR(CSDKWindow::PostAccepted,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmManagerNotify message handling functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
LRESULT CSDKWindow::_OnMsgConferenceCreated(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgConferenceCreated);
|
|
|
|
CNmManagerObj* pMgr = reinterpret_cast<CNmManagerObj*>(wParam);
|
|
INmConference* pInternalConf = reinterpret_cast<INmConference*>(lParam);
|
|
|
|
pMgr->Fire_ConferenceCreated(pInternalConf);
|
|
pMgr->Release();
|
|
if(pInternalConf)
|
|
{
|
|
pInternalConf->Release();
|
|
}
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgConferenceCreated);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
LRESULT CSDKWindow::_OnMsgManagerNmUI(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgManagerNmUI);
|
|
|
|
CNmManagerObj* pMgr = reinterpret_cast<CNmManagerObj*>(wParam);
|
|
CONFN uNotify = static_cast<CONFN>(lParam);
|
|
|
|
pMgr->Fire_NmUI(uNotify);
|
|
pMgr->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgManagerNmUI);
|
|
return 0;
|
|
}
|
|
|
|
|
|
LRESULT CSDKWindow::_OnMsgCallCreated(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgCallCreated);
|
|
|
|
CNmManagerObj* pMgr = reinterpret_cast<CNmManagerObj*>(wParam);
|
|
INmCall* pInternalCall = reinterpret_cast<INmCall*>(lParam);
|
|
|
|
pMgr->Fire_CallCreated(pInternalCall);
|
|
pMgr->Release();
|
|
if(pInternalCall)
|
|
{
|
|
pInternalCall->Release();
|
|
}
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgCallCreated);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmConferenceNotify message handling functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
LRESULT CSDKWindow::_OnMsgConferenceNmUI(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgConferenceNmUI);
|
|
|
|
CNmConferenceObj* pConf = reinterpret_cast<CNmConferenceObj*>(wParam);
|
|
CONFN uNotify = static_cast<CONFN>(lParam);
|
|
|
|
pConf->Fire_NmUI(uNotify);
|
|
pConf->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgConferenceNmUI);
|
|
return 0;
|
|
}
|
|
|
|
|
|
LRESULT CSDKWindow::_OnMsgConferenceStateChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgConferenceStateChanged);
|
|
CNmConferenceObj* pConference = reinterpret_cast<CNmConferenceObj*>(wParam);
|
|
NM_CONFERENCE_STATE uState = static_cast<NM_CONFERENCE_STATE>(lParam);
|
|
|
|
pConference->Fire_StateChanged(uState);
|
|
pConference->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgConferenceStateChanged);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnMsgConferenceMemberChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgConferenceMemberChanged);
|
|
|
|
CNmConferenceObj* pConf = reinterpret_cast<CNmConferenceObj*>(wParam);
|
|
ConferenceMemberChanged* pParams = reinterpret_cast<ConferenceMemberChanged*>(lParam);
|
|
|
|
pConf->Fire_MemberChanged(pParams->uNotify, pParams->pMember);
|
|
|
|
pConf->Release();
|
|
if(pParams->pMember)
|
|
{
|
|
pParams->pMember->Release();
|
|
}
|
|
delete pParams;
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgConferenceMemberChanged);
|
|
return 0;
|
|
}
|
|
|
|
|
|
LRESULT CSDKWindow::_OnMsgConferenceChannelChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgConferenceChannelChanged);
|
|
|
|
CNmConferenceObj* pConf = reinterpret_cast<CNmConferenceObj*>(wParam);
|
|
ConferenceChannelChanged* pParams = reinterpret_cast<ConferenceChannelChanged*>(lParam);
|
|
|
|
pConf->Fire_ChannelChanged(pParams->uNotify, pParams->pChannel);
|
|
|
|
pConf->Release();
|
|
if(pParams->pChannel)
|
|
{
|
|
pParams->pChannel->Release();
|
|
}
|
|
delete pParams;
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgConferenceChannelChanged);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnStateChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandlede)
|
|
{
|
|
CNmChannelAppShareObj* pAppShareChan = reinterpret_cast<CNmChannelAppShareObj*>(wParam);
|
|
StateChanged* pParams = reinterpret_cast<StateChanged*>(lParam);
|
|
|
|
|
|
pAppShareChan->Fire_StateChanged(pParams->uNotify, pParams->pApp);
|
|
|
|
pAppShareChan->Release();
|
|
pParams->pApp->Release();
|
|
|
|
delete pParams;
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// INmCallNotify message handling functions
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
LRESULT CSDKWindow::_OnMsgCallStateChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgCallStateChanged);
|
|
CNmCallObj* pCall = reinterpret_cast<CNmCallObj*>(wParam);
|
|
NM_CALL_STATE uState = static_cast<NM_CALL_STATE>(lParam);
|
|
|
|
pCall->Fire_StateChanged(uState);
|
|
pCall->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgCallStateChanged);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnMsgCallNmUI(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnCallMsgNmUI);
|
|
|
|
CNmCallObj* pCall = reinterpret_cast<CNmCallObj*>(wParam);
|
|
CONFN uNotify = static_cast<CONFN>(lParam);
|
|
|
|
pCall->Fire_NmUI(uNotify);
|
|
pCall->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgCallNmUI);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnMsgFailed(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgFailed);
|
|
|
|
CNmCallObj* pCall = reinterpret_cast<CNmCallObj*>(wParam);
|
|
ULONG uError = (ULONG)lParam;
|
|
|
|
pCall->Fire_Failed(uError);
|
|
pCall->Release();
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgFailed);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnMsgAccepted(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DBGENTRY(CSDKWindow::_OnMsgAccepted);
|
|
|
|
CNmCallObj* pCall = reinterpret_cast<CNmCallObj*>(wParam);
|
|
INmConference* pConf = reinterpret_cast<INmConference*>(lParam);
|
|
|
|
pCall->Fire_Accepted(pConf);
|
|
pCall->Release();
|
|
if(pConf)
|
|
{
|
|
pConf->Release();
|
|
}
|
|
|
|
DBGEXIT(CSDKWindow::_OnMsgAccepted);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CSDKWindow::_OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
|
|
if(DELAY_UNLOAD_TIMER == wParam)
|
|
{
|
|
if(ms_NumUnlocks)
|
|
{
|
|
--ms_NumUnlocks;
|
|
_Module.Unlock();
|
|
}
|
|
|
|
if(!ms_NumUnlocks)
|
|
{
|
|
KillTimer(DELAY_UNLOAD_TIMER);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |