📄 hxcleng.cpp
字号:
{#if defined(HELIX_FEATURE_REGISTRY) m_pRegistry->Init((IUnknown*) (IHXClientEngine*)this); #endif /* HELIX_FEATURE_REGISTRY */ // Init the plugin handler. m_pPlugin2Handler->Init((IUnknown*) (IHXClientEngine*)this); #if defined(HELIX_FEATURE_PLUGINHANDLER2) ULONG32 unTotalPlugins = m_pPlugin2Handler->GetNumOfPlugins2(); // The basic idea of this for loop is that we want to loop // through the list of plugins and load all of the plugins that // are non multi-load plugins. for (;unTotalPlugins; unTotalPlugins--) { IHXValues* pPluginProps = NULL; ULONG32 isMultiple = 0; if (SUCCEEDED(m_pPlugin2Handler->GetPluginInfo((unTotalPlugins-1), pPluginProps)) && pPluginProps) { pPluginProps->GetPropertyULONG32(PLUGIN_LOADMULTIPLE, isMultiple); pPluginProps->Release(); } if(!isMultiple) { IUnknown* pInstance = NULL; m_pPlugin2Handler->GetInstance(unTotalPlugins-1, pInstance); //If we got an instance of the plugin if(pInstance) { HX_RESULT res; IHXPlugin* pFPlugin = 0; res = pInstance->QueryInterface(IID_IHXPlugin, (void**)&pFPlugin); //The Plugin should be an IHXPlugin so we should get //an interface. if(res == HXR_OK) { //Finally init the plugin. pFPlugin->InitPlugin((IUnknown*) (IHXClientEngine*) this); if (!m_pSingleLoadPlugins) { m_pSingleLoadPlugins = new CHXSimpleList(); } if (m_pSingleLoadPlugins) { //Add this plugin to the Plugin List m_pSingleLoadPlugins->AddTail((void*)pFPlugin); } } //End of if res==HX_PK statement //Release HX_RELEASE(pInstance); } //End of if pInstance statement } //End of if Plugin is multiload }//End of for-loop#endif /* HELIX_FEATURE_PLUGINHANDLER2 */ } //End of outer if statement // get the resource manager instance#if defined(HELIX_FEATURE_RESOURCEMGR) m_pExternalResourceManager = HXExternalResourceManager::Instance((IUnknown*)(IHXClientEngine*)this); m_pResMgr = new CHXResMgr((IUnknown*)(IHXClientEngine*)this);#endif /* HELIX_FEATURE_RESOURCEMGR */#if defined(_UNIX) || defined(__TCS__) m_pSiteEventHandler = NULL; IHXCommonClassFactory* pCCF = NULL; if (QueryInterface(IID_IHXCommonClassFactory, (void**) &pCCF) == HXR_OK) { pCCF->CreateInstance(IID_IHXSiteEventHandler, (void**) &m_pSiteEventHandler); } HX_RELEASE(pCCF);#endif#if defined(HELIX_FEATURE_PROXYMGR) m_pProxyManager->Initialize((IUnknown*)(IHXClientEngine*)this);#endif /* HELIX_FEATURE_PROXYMGR */#if defined(HELIX_FEATURE_OVERLAYMGR) m_pOverlayManager->Initialize();#endif /* HELIX_FEATURE_OVERLAYMGR */ if (!m_LastError) { m_bInitialized = TRUE; }}/* * IUnknown methods *//////////////////////////////////////////////////////////////////////////// Method:// IUnknown::QueryInterface// Purpose:// Implement this to export the interfaces supported by your // object.//STDMETHODIMP HXClientEngine::QueryInterface(REFIID riid, void** ppvObj){ // might be memory error in constructor... if (m_LastError) return m_LastError; // create the following objects only if needed if (!m_pCookiesHelper && IsEqualIID(riid, IID_IHXCookiesHelper)) { #if defined(HELIX_FEATURE_COOKIES) m_pCookiesHelper = new HXCookiesHelper(); if (m_pCookiesHelper) { m_pCookiesHelper->AddRef(); }#endif /* defined(HELIX_FEATURE_COOKIES) */ }#if defined(HELIX_FEATURE_META) else if (!m_pValidator && IsEqualIID(riid, IID_IHXValidator)) { m_pValidator = new HXValidator((IUnknown*) (IHXClientEngine*)this); if (m_pValidator) { m_pValidator->AddRef(); } }#endif /* HELIX_FEATURE_META */#if defined(HELIX_FEATURE_VIEWSOURCE) else if (!m_pViewSource && IsEqualIID(riid, IID_IHXClientViewSourceSink)) { m_pViewSource = new HXViewSource((IUnknown*) (IHXClientEngine*)this); if ( m_pViewSource ) { m_pViewSource->AddRef(); } }#endif /* HELIX_FEATURE_VIEWSOURCE */#if defined(HELIX_FEATURE_NETINTERFACES) else if (!m_pNetInterfaces && IsEqualIID(riid, IID_IHXNetInterfaces)) { m_pNetInterfaces = new HXNetInterface((IUnknown*)(IHXClientEngine*)this); HX_ADDREF(m_pNetInterfaces); }#endif /* HELIX_FEATURE_NETINTERFACES */#if defined(HELIX_FEATURE_PAC) && defined(HELIX_FEATURE_PLUGINHANDLER2) else if (!m_pProxyAutoConfig && IsEqualIID(riid, IID_IHXProxyAutoConfig)) { IUnknown* pUnknown = NULL; if (HXR_OK == m_pPlugin2Handler->FindPluginUsingStrings(PLUGIN_CLASS, PLUGIN_PAC_TYPE, NULL, NULL, NULL, NULL, pUnknown)) { pUnknown->QueryInterface(IID_IHXProxyAutoConfig, (void**)&m_pProxyAutoConfig); m_pProxyAutoConfig->Init((IUnknown*) (IHXClientEngine*) this); } HX_RELEASE(pUnknown); }#endif /* HELIX_FEATURE_PAC && HELIX_FEATURE_PLUGINHANDLER2 */#if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED) else if (!m_pMacBlitMutex && IsEqualIID(riid, IID_IHXMacBlitMutex)) { HXMutex::MakeMutex(m_pMacBlitMutex); }#endif#if defined (HELIX_FEATURE_COOKIES) else if (!m_pCookies && (IsEqualIID(riid, IID_IHXCookies) || IsEqualIID(riid, IID_IHXCookies2))) { m_pCookies = NewCookies(); HX_ADDREF(m_pCookies); }#endif /* defined (HELIX_FEATURE_COOKIES) */ QInterfaceList qiList[] = { { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXClientEngine*)this }, { GET_IIDHANDLE(IID_IHXClientEngine), (IHXClientEngine*)this }, { GET_IIDHANDLE(IID_IHXClientEngineMapper), (IHXClientEngineMapper*)this },#if defined(_UNIX) && !defined(_VXWORKS) { GET_IIDHANDLE(IID_IHXClientEngineSelector), (IHXClientEngineSelector*)this },#endif { GET_IIDHANDLE(IID_IHXClientEngineSetup), (IHXClientEngineSetup*)this }, { GET_IIDHANDLE(IID_IHXInterruptState), (IHXInterruptState*)this }, { GET_IIDHANDLE(IID_IHXShutDownEverything), (IHXShutDownEverything*)this }, { GET_IIDHANDLE(IID_IHXOverrideDefaultServices), (IHXOverrideDefaultServices*)this }, { GET_IIDHANDLE(IID_IHXErrorMessages), (IHXErrorMessages*)this }, { GET_IIDHANDLE(IID_IHXCoreMutex), (IHXCoreMutex*)this } }; HX_RESULT retval = ::QIFind(qiList, QILISTSIZE(qiList), riid, ppvObj); if (retval == HXR_OK) { return retval; } #if defined _UNIX && !defined _VXWORKS else if (IsEqualIID(riid, IID_IHXAsyncIOSelection)) { if (m_pAsyncIOSelection) { m_pAsyncIOSelection->AddRef(); *ppvObj = m_pAsyncIOSelection; return HXR_OK; } AddRef(); *ppvObj = (IHXAsyncIOSelection*)this; return HXR_OK; }#endif#if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED) else if (IsEqualIID(riid, IID_IHXMacBlitMutex)) { AddRef(); *ppvObj = (IHXMacBlitMutex*)this; return HXR_OK; }#endif // We support Scheduler and Preferences Interface also in the HXClientEngine.. else if (m_pCommonClassFactoryOverride && m_pCommonClassFactoryOverride-> QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; } else if (m_pCommonClassFactory && m_pCommonClassFactory->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; } else if (m_pScheduler && m_pScheduler->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#ifdef HELIX_FEATURE_OPTIMIZED_SCHEDULER else if (m_pOptimizedScheduler && m_pOptimizedScheduler->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_OPTIMIZED_SCHEDULER */#if defined(HELIX_FEATURE_PLAYBACK_NET) else if (m_pNetworkServices && m_pNetworkServices->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_PLAYBACK_NET */#if defined(HELIX_FEATURE_REGISTRY) else if (m_pRegistry && m_pRegistry->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_REGISTRY */#if defined(HELIX_FEATURE_AUDIO) else if (m_pAudioSession && m_pAudioSession->QueryInterface(riid,ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_AUDIO */#if defined(HELIX_FEATURE_PREFERENCES) else if (m_pPreferences && m_pPreferences->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_AUDIO */#if defined(HELIX_FEATURE_HYPER_NAVIGATE) else if (m_pHyperNavigate && m_pHyperNavigate->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_HYPER_NAVIGATE */ else if (m_pPlugin2Handler && m_pPlugin2Handler->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; } else if (m_pPlayerSinkControl && m_pPlayerSinkControl->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#if defined(HELIX_FEATURE_ASM) else if (m_pASM && m_pASM->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_ASM */#if defined(HELIX_FEATURE_META) else if (m_pValidator && m_pValidator->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_META */#if defined(HELIX_FEATURE_RESOURCEMGR) else if (m_pExternalResourceManager && m_pExternalResourceManager->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_RESOURCEMGR */#if defined(HELIX_FEATURE_AUTHENTICATION) else if (m_pCredentialsCache && m_pCredentialsCache->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_AUTHENTICATION */#if defined(HELIX_FEATURE_XMLPARSER) else if (m_pXMLParser && m_pXMLParser->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_XMLPARSER */#if defined (HELIX_FEATURE_COOKIES) else if (m_pCookies && m_pCookies->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; } else if (m_pCookiesHelper && m_pCookiesHelper->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_COOKIES */#if defined(_MEDIUM_BLOCK) else if (m_pAllocator && m_pAllocator->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* _MEDIUM_BLOCK */#if defined(HELIX_FEATURE_VIEWSOURCE) else if (m_pViewSource && m_pViewSource->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_VIEWSOURCE */#if defined(HELIX_FEATURE_SYSTEMREQUIRED) else if (m_pSystemRequired && m_pSystemRequired->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_SYSTEMREQUIRED */#if defined(HELIX_FEATURE_PROXYMGR) else if (m_pProxyManager && m_pProxyManager->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; } #endif /* HELIX_FEATURE_PROXYMGR */#if defined(HELIX_FEATURE_SMARTERNETWORK) else if (m_pPreferredTransportManager && m_pPreferredTransportManager->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_SMARTERNETWORK */#if defined(HELIX_FEATURE_OVERLAYMGR) else if (m_pOverlayManager && m_pOverlayManager->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_OVERLAYMGR */ else if (m_pMultiPlayPauseSupport && IsEqualIID(riid, IID_IHXMultiPlayPauseSupport) && m_pMultiPlayPauseSupport->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#if defined(HELIX_FEATURE_NETINTERFACES) else if (m_pNetInterfaces && m_pNetInterfaces->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_NETINTERFACES */#if defined(HELIX_FEATURE_PAC) else if (m_pProxyAutoConfig && m_pProxyAutoConfig->QueryInterface(riid, ppvObj) == HXR_OK) { return HXR_OK; }#endif /* HELIX_FEATURE_PAC */ *ppvObj = NULL; return HXR_NOINTERFACE;}/////////////////////////////////////////////////////////////////////////// Method:// IUnknown::AddRef// Purpose:// Everyone usually implements this the same... feel free to use// this implementation.//STDMETHODIMP_(ULONG32) HXClientEngine::AddRef(){ return InterlockedIncrement(&m_lRefCount);}/////////////////////////////////////////////////////////////////////////// Method:// IUnknown::Release// Purpose:// Everyone usually implements this the same... feel free to use// this implementation.//STDMETHODIMP_(ULONG32) HXClientEngine::Release(){ if (InterlockedDecrement(&m_lRefCount) > 0) { return m_lRefCount; } if(m_lRefCount == 0) { delete this; } return 0;}/* * IHXClientEngine methods *//************************************************************************ * Method: * IHXClientEngine::CreatePlayer * Purpose: * TBD. * */STDMETHODIMP HXClientEngine::CreatePlayer(IHXPlayer* &pPlayer){ if (!m_bInitialized) { _Initialize(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -