hxcleng.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:17k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _HXCLIENTENGINE_
  36. #define _HXCLIENTENGINE_
  37. #include "chxelst.h"
  38. #include "hxmon.h"
  39. #include "hxclreg.h"
  40. #include "statinfo.h"
  41. #include "strminfo.h"
  42. #include "hxshtdn.h"
  43. #include "hxupgrd.h"
  44. #include "hxerror.h"
  45. #if defined(HELIX_FEATURE_LITEPREFS)
  46. #include "chxliteprefs.h"
  47. #endif
  48. #ifdef _UNIX
  49. #include "hxengin.h"
  50. #endif
  51. class HXCommonClassFactory;
  52. class HXScheduler;
  53. class   HXOptimizedSchedulerBase;
  54. class HXPreferences;
  55. class HXNetworkServices;
  56. class HXHyperNavigate;
  57. class HXThreadHyperNavigate;
  58. class HXClientRegistry;
  59. class CHXAudioSession;
  60. class HXCoreGuiHook;
  61. class Plugin2Handler;
  62. class HXPluginManager;
  63. class BaseHandler;
  64. class HXAutoConfig;
  65. class CHXPlayerSinkControl;
  66. class HXCoreComm;
  67. class   HXMutex;
  68. class HXValidator;
  69. class HXExternalResourceManager;
  70. class CHXCredentialsCache;
  71. class CHXResMgr;
  72. class HXXMLParser;
  73. class HXCookies;
  74. class HXCookiesHelper;
  75. class HXPreferredTransportManager;
  76. class HXProxyManager;
  77. class CMediumBlockAllocator;
  78. class HXViewSource;
  79. class CHXMapStringToOb;
  80. class   HXOverlayManager;
  81. class HXNetInterface;
  82. class HXPlayer;
  83. class HXCookies;
  84. struct IHXClientAdviseSink;
  85. struct IHXErrorMessages;
  86. struct IHXCommonClassFactory;
  87. struct IHXClientEngine;
  88. struct IHXMimeTypeMapper;
  89. struct IHXRegistry;
  90. struct IHXHyperNavigate;
  91. struct  IHXPreferences;
  92. struct  IHXShutDownEverything;
  93. struct IHXValidator;
  94. struct  IHXSiteEventHandler;
  95. struct IHXXMLParser;
  96. struct  IHXSystemRequired;
  97. struct  IHXMultiPlayPauseSupport;
  98. struct IHXProxyAutoConfig;
  99. struct IHXNetInterfaces;
  100. struct  IHXBandwidthManager;
  101. #if defined(HELIX_FEATURE_SYSTEMREQUIRED)
  102. class HXSystemRequired : public IHXSystemRequired
  103. {
  104. protected:
  105.     LONG32     m_lRefCount;
  106. public:
  107.     HXSystemRequired() {m_lRefCount = 0;}
  108.     ~HXSystemRequired() {};
  109.     /*
  110.      * IUnknown methods
  111.      */
  112.     STDMETHOD(QueryInterface) (THIS_
  113. REFIID riid,
  114. void** ppvObj);
  115.     STDMETHOD_(ULONG32,AddRef) (THIS);
  116.     STDMETHOD_(ULONG32,Release) (THIS);
  117.     /*
  118.      * IHXSystemRequired methods
  119.      */
  120.     /************************************************************************
  121.      * Method:
  122.      * IHXSystemRequired::HasFeatures
  123.      * Purpose:
  124.      * Check if required features are present on the system.
  125.      *  Returns:
  126.      * HXR_OK -    features are here, no upgrade required;
  127.      *     all features are removed from pFeatures.
  128.      * HXR_FAIL -  some features are missing;
  129.      *     pFeatures contains only those features 
  130.      *     that need upgrade.
  131.      *
  132.      */       
  133.     STDMETHOD(HasFeatures)  (THIS_ 
  134.     IHXUpgradeCollection* pFeatures);
  135. };
  136. #endif /* HELIX_FEATURE_SYSTEMREQUIRED */
  137. class HXClientEngine : 
  138. public IHXClientEngine
  139. #if defined _UNIX && !defined _VXWORKS
  140.                       , public IHXClientEngineSelector
  141.                       , public IHXAsyncIOSelection
  142. #endif
  143.       , public IHXClientEngineSetup
  144.       , public IHXInterruptState
  145.       , public IHXShutDownEverything
  146.       , public IHXOverrideDefaultServices
  147.       , public IHXErrorMessages
  148.                       , public IHXClientEngineMapper
  149.       , public IHXCoreMutex
  150. #if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED)
  151.       , public IHXMacBlitMutex
  152. #endif
  153. {
  154. protected:
  155.     LONG32     m_lRefCount;
  156.     ULONG32     m_ulPlayerIndex;
  157.     INT32     m_unRegistryID;
  158.     HXClientRegistry*     m_pRegistry;
  159.     HXCommonClassFactory*  m_pCommonClassFactory;
  160.     IHXCommonClassFactory* m_pCommonClassFactoryOverride;
  161.     CMediumBlockAllocator*  m_pAllocator;
  162.     HXScheduler*     m_pScheduler;
  163.     HXOptimizedSchedulerBase* m_pOptimizedScheduler;
  164.     IHXPreferences*     m_pPreferences;
  165. #if defined(HELIX_FEATURE_NO_INTERNAL_PREFS)
  166.     IHXPreferences*     m_pOrigPreferences;
  167. #elif defined(HELIX_FEATURE_LITEPREFS)
  168.     CHXLitePrefs*     m_pOrigPreferences;
  169. #else
  170.     HXPreferences*     m_pOrigPreferences;
  171. #endif
  172.     CHXAudioSession*     m_pAudioSession;
  173.     HXNetworkServices*     m_pOrigNetworkServices;
  174.     IHXNetworkServices*    m_pNetworkServices;
  175. #ifdef _UNIX
  176.     IHXAsyncIOSelection*   m_pAsyncIOSelection;
  177.     BOOL                    m_bNetworkThreading;
  178. #endif
  179.     HXCookies*     m_pCookies;
  180.     HXCookiesHelper*     m_pCookiesHelper;
  181.     HXNetInterface*     m_pNetInterfaces;
  182.     IHXProxyAutoConfig*    m_pProxyAutoConfig;
  183.     IHXHyperNavigate*     m_pHyperNavigate;
  184.     HXThreadHyperNavigate* m_pOrigHyperNavigate;
  185.     HXValidator*     m_pValidator;
  186.     IHXBandwidthManager*    m_pASM;
  187.     CHXPlayerSinkControl*   m_pPlayerSinkControl;
  188.     CHXCredentialsCache*   m_pCredentialsCache;
  189.     CHXResMgr*     m_pResMgr;
  190.     HXExternalResourceManager* m_pExternalResourceManager;
  191.     HXXMLParser*     m_pXMLParser;
  192.     HXViewSource*     m_pViewSource;
  193.     IHXSystemRequired*     m_pSystemRequired;
  194. #if defined(_UNIX) || defined(__TCS__)
  195.     IHXSiteEventHandler*   m_pSiteEventHandler;
  196. #endif
  197.     HXProxyManager*     m_pProxyManager;
  198.     HXPreferredTransportManager*   m_pPreferredTransportManager;
  199.     HXOverlayManager*              m_pOverlayManager;
  200.     IHXMultiPlayPauseSupport*     m_pMultiPlayPauseSupport;
  201.     //List to store the plugins for information reguarding created players.
  202.     CHXSimpleList*     m_pSingleLoadPlugins;
  203. public:
  204. #if defined(_STATICALLY_LINKED) || !defined(HELIX_FEATURE_PLUGINHANDLER2)
  205. #if defined(HELIX_CONFIG_CONSOLIDATED_CORE)
  206.     BaseHandler*            m_pPlugin2Handler;
  207. #else /* HELIX_CONFIG_CONSOLIDATED_CORE */
  208.     HXPluginManager*     m_pPlugin2Handler;
  209. #endif /* HELIX_CONFIG_CONSOLIDATED_CORE */
  210. #else
  211.     Plugin2Handler*     m_pPlugin2Handler;
  212. #endif /* _STATICALLY_LINKED */
  213.     HXClientEngine(void);
  214.     ~HXClientEngine(void);
  215.     /*
  216.      * IUnknown methods
  217.      */
  218.     STDMETHOD(QueryInterface) (THIS_
  219. REFIID riid,
  220. void** ppvObj);
  221.     STDMETHOD_(ULONG32,AddRef) (THIS);
  222.     STDMETHOD_(ULONG32,Release) (THIS);
  223.     /*
  224.      * IHXClientEngine methods
  225.      */
  226.     /************************************************************************
  227.      * Method:
  228.      *     IHXClientEngine::CreatePlayer
  229.      * Purpose:
  230.      *     Creates a new IHXPlayer instance.
  231.      *
  232.      */
  233.     STDMETHOD(CreatePlayer) (THIS_
  234. REF(IHXPlayer*)    pPlayer);
  235.     /************************************************************************
  236.      * Method:
  237.      *     IHXClientEngine::ClosePlayer
  238.      * Purpose:
  239.      *     Called by the engine when it is done using the player...
  240.      *
  241.      */
  242.     STDMETHOD(ClosePlayer) (THIS_
  243. IHXPlayer*    pPlayer);
  244.     /************************************************************************
  245.      * Method:
  246.      *     IHXClientEngine::GetPlayerCount
  247.      * Purpose:
  248.      *     Returns the current number of IHXPlayer instances supported by
  249.      *     this client engine instance.
  250.      */
  251.     STDMETHOD_(UINT16, GetPlayerCount)(THIS);
  252.     /************************************************************************
  253.      * Method:
  254.      *     IHXClientEngine::GetPlayer
  255.      * Purpose:
  256.      *     Returns the Nth IHXPlayer instances supported by this client 
  257.      *     engine instance.
  258.      */
  259.     STDMETHOD(GetPlayer) (THIS_
  260. UINT16 nPlayerNumber,
  261. REF(IUnknown*) pUnknown);
  262.     /************************************************************************
  263.      * Method:
  264.      *     IHXClientEngine::EventOccurred
  265.      * Purpose:
  266.      *     Clients call this to pass OS events to all players. HXxEvent
  267.      *     defines a cross-platform event.
  268.      */
  269.     STDMETHOD(EventOccurred) (THIS_
  270. HXxEvent* /*IN*/ pEvent);
  271. /*
  272.  * IHXMimeTypeMapper methods
  273.  */
  274.     STDMETHOD(MapFromExtToMime) (THIS_
  275. const char*     /*IN*/  pExtension,
  276. REF(const char*)    /*OUT*/ pMimeType);
  277. #ifdef _UNIX
  278.     STDMETHOD_(INT32,Select) (THIS_
  279.       INT32 n,
  280.       fd_set* readfds,
  281.       fd_set* writefds,
  282.       fd_set* exceptfds,
  283.       struct timeval* timeout);
  284.     STDMETHOD(Add)           (THIS_
  285.       IHXCallback* pCallback,
  286.       INT32         lFileDescriptor,
  287.       UINT32        ulFlags);
  288.     STDMETHOD(Remove)        (THIS_
  289.       INT32         lFileDescriptor,
  290.       UINT32        ulFlags);
  291.     CHXSimpleList*            m_select_callbacks;
  292. #endif
  293.     /*
  294.      * IHXClientEngineSetup methods
  295.      */
  296.     /************************************************************************
  297.      * Method:
  298.      *     IHXClientEngineSetup::Setup
  299.      * Purpose:
  300.      *      Top level clients use this interface to over-ride certain basic 
  301.      *     interfaces are: IHXPreferences, IHXHyperNavigate
  302.      */
  303.     STDMETHOD(Setup) (THIS_
  304. IUnknown* pContext);
  305.     /*
  306.      * IHXInterruptState methods
  307.      */
  308.     STDMETHOD_(BOOL,AtInterruptTime) (THIS);
  309.     STDMETHOD(EnterInterruptState) (THIS);
  310.     STDMETHOD(LeaveInterruptState) (THIS);
  311.     STDMETHOD(EnableInterrupt) (THIS_
  312. BOOL bEnable);
  313.     
  314.     STDMETHOD_(BOOL, IsInterruptEnabled) (THIS);
  315.     /*
  316.      * IHXShutDownEverything methods
  317.      */
  318.     /************************************************************************
  319.      * Method:
  320.      *     IHXShutDownEverything::ShutDown
  321.      * Purpose:
  322.      *     Shutdown all the renderers/fileformats
  323.      *
  324.      */
  325.     STDMETHOD(ShutDown) (THIS);
  326.     /************************************************************************
  327.      * Method:
  328.      *     IHXShutDownEverything::StopAllOtherPlayers
  329.      * Purpose:
  330.      *     Stop all the players in other processes if they use audio
  331.      *
  332.      */
  333.     STDMETHOD(StopAllOtherPlayers) (THIS);
  334.     /************************************************************************
  335.      * Method:
  336.      *     IHXShutDownEverything::AskAllOtherPlayersToReload
  337.      * Purpose:
  338.      *     Ask all other players in other processes to reload their 
  339.      *     DLLs.
  340.      *
  341.      */
  342.     STDMETHOD(AskAllOtherPlayersToReload) (THIS);
  343.     /************************************************************************
  344.      * Method:
  345.      *     IHXShutDownEverything::AskAllOtherPlayersToUnload
  346.      * Purpose:
  347.      *     Ask all other players in other processes to unload their 
  348.      *     unused DLLs.
  349.      *
  350.      */
  351.     STDMETHOD(AskAllOtherPlayersToUnload) (THIS);
  352.     /*
  353.      * IHXOverrideDefaultServices methods
  354.      */
  355.     /************************************************************************
  356.      *  Method:
  357.      *      IHXOverrideDefaultServices::OverrideServices
  358.      *  Purpose:
  359.      *      Override default services provided by the G2 system.
  360.      * 
  361.      */
  362.     STDMETHOD(OverrideServices)         (THIS_
  363. IUnknown* pContext);
  364.     /*
  365.      *  IHXErrorMessages methods
  366.      */
  367.     /************************************************************************
  368.      * Method:
  369.      *     IHXErrorMessages::Report
  370.      * Purpose:
  371.      *     Call this method to report an error, event, or status message.
  372.      * Parameters:
  373.      *
  374.      *     const UINT8 unSeverity
  375.      *     Type of report. This value will impact how the player, tool, or
  376.      *     server will react to the report. Possible values are described 
  377.      *     above. Depending on the error type, an error message with the 
  378.      *     RMA code, anda string translation of that code will be displayed. 
  379.      *     The error dialog includes a "more info" section that displays the
  380.      *     user code and string, and a link to the more info URL. In the 
  381.      *     server these messages are logged to the log file.
  382.      *
  383.      *     const ULONG32   ulHXCode
  384.      *     Well known RMA error code. This will be translated to a text
  385.      *     representation for display in an error dialog box or log file.
  386.      *
  387.      *     const ULONG32   ulUserCode
  388.      *     User specific error code. This will NOT be translated to a text
  389.      *     representation. This can be any value the caller wants, it will
  390.      *     be logged or displayed but not interpretted.
  391.      *
  392.      *     const char*     pUserString
  393.      *     User specific error string. This will NOT be translated or 
  394.      *     modified. This can be any value the caller wants, it will
  395.      *     be logged or displayed but not interpretted.
  396.      *
  397.      *     const char*     pMoreInfoURL
  398.      *     User specific more info URL string.
  399.      *
  400.      */
  401.     STDMETHOD(Report) (THIS_
  402. const UINT8 unSeverity,  
  403. HX_RESULT ulHXCode,
  404. const ULONG32 ulUserCode,
  405. const char* pUserString,
  406. const char* pMoreInfoURL);
  407.     /************************************************************************
  408.      * Method:
  409.      *     IHXErrorMessages::GetErrorText
  410.      * Purpose:
  411.      *     Call this method to get the text description of a RMA error code.
  412.      * Parameters:
  413.      *     HX_RESULT ulHXCode (A RMA error code)
  414.      *  Return Value:
  415.      *     IHXBuffer* containing error text.
  416.      */
  417.     STDMETHOD_(IHXBuffer*, GetErrorText) (THIS_
  418. HX_RESULT ulHXCode);
  419.     /************************************************************************
  420.      * Method:
  421.      *     IHXClientEngineMapper::GetPlayerBySite
  422.      * Purpose:
  423.      *     Returns the IHXPlayer instance supported by this client 
  424.      *     engine instance that contains the specified IHXSite.
  425.      */
  426.     STDMETHOD(GetPlayerBySite) (THIS_
  427. IHXSite* pSite,
  428. REF(IUnknown*) pUnknown);
  429.     /************************************************************************
  430.      * Method:
  431.      *     IHXCoreMutex::LockCoreMutex
  432.      * Purpose:
  433.      *      Call this method to lock the client engine's core mutex.
  434.      */
  435.     STDMETHOD(LockCoreMutex)    (THIS);
  436.     /************************************************************************
  437.      * Method:
  438.      *     IHXCoreMutex::UnlockCoreMutex
  439.      * Purpose:
  440.      *      Call this method to unlock the client engine's core mutex.
  441.      */
  442.     STDMETHOD(UnlockCoreMutex)    (THIS);
  443. #if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED)
  444.     /************************************************************************
  445.      * Method:
  446.      *     IHXMacBlitMutex::LockMacBlitMutex
  447.      * Purpose:
  448.      *      Call this method to lock the Mac blitting mutex
  449.      */
  450.     STDMETHOD(LockMacBlitMutex)    (THIS);
  451.     /************************************************************************
  452.      * Method:
  453.      *     IHXMacBlitMutex::UnlockMacBlitMutex
  454.      * Purpose:
  455.      *      Call this method to unlock the Mac blitting mutex
  456.      */
  457.     STDMETHOD(UnlockMacBlitMutex)    (THIS);
  458. #endif
  459.     STDMETHOD(StopAudioPlayback) (THIS);
  460.     virtual void Close();
  461.     HXMutex* GetCoreMutex() {return m_pCoreMutex;};
  462.     CHXResMgr* GetResMgr() {return m_pResMgr;};
  463.     void NotifyPlayState(BOOL bInPlayingState);
  464.     HXCookies* GetCookies() {return m_pCookies;};
  465.     UINT32 m_lROBActive;
  466. protected:
  467.     void _Initialize();
  468.     virtual CHXAudioSession* NewAudioSession();
  469.     virtual HXPlayer* NewPlayer();
  470.     virtual HXCookies* NewCookies();
  471.     void CreatePrefIfNoExist(const char* pName, const char* pValue);
  472.     void CreatePluginDir();
  473.     void CreateCodecDir();
  474.     void InitializeThreadedObjects();
  475.     void InitializeRegistry();
  476.     IHXBuffer* CreateBufferAndSetToString(const char* pStr);
  477.     void InitPaths();
  478.     CHXSimpleList m_PlayerList;
  479.     HX_RESULT m_LastError;
  480.     HX_BITFIELD m_bIsSchedulerStarted : 1;
  481.     HX_BITFIELD m_bInitialized : 1;
  482.     BOOL m_bUseCoreThread;
  483.     HX_BITFIELD m_bUseCoreThreadExternallySet : 1;
  484.     HXCoreComm* m_pCoreComm;
  485.     HXMutex* m_pCoreMutex;
  486. #if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED)
  487.     BOOL m_bUseMacBlitMutex;
  488.     HXMutex* m_pMacBlitMutex;
  489. #endif
  490.     const char* m_AUName;
  491. };
  492. #endif // HXClientEngine