⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxcleng.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

#if defined(HELIX_FEATURE_OPTIMIZED_SCHEDULER)
    if (m_pOptimizedScheduler)
    {
	m_pOptimizedScheduler->StartScheduler();
    }
#endif /* HELIX_FEATURE_OPTIMIZED_SCHEDULER */

    InitializeThreadedObjects();

    // load all the plugins 
    if (!m_LastError)
    {
#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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -