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

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 _SITEMGR_H_
  36. #define _SITEMGR_H_
  37. struct IHXSiteUserSupplier;
  38. class CHXSiteWindowed;
  39. /*
  40.  * element containd in event hook list
  41.  */
  42. class CHXEventHookElement
  43. {
  44. public:
  45.     CHXEventHookElement     (IHXEventHook* pHook,
  46.     UINT16     uLayer);
  47.     ~CHXEventHookElement    ();
  48.     IHXEventHook* m_pHook;
  49.     UINT16    m_uLayer;
  50. };
  51. /****************************************************************************
  52.  * 
  53.  *  Class:
  54.  *
  55.  * CHXSiteManager
  56.  *
  57.  *  Purpose:
  58.  *
  59.  * Implementation for IHXSiteManager in the client core.
  60.  *
  61.  */
  62. class CHXSiteManager : public IHXSiteManager,
  63.        public IHXEventHookMgr,
  64.                        public IHXSiteManager2
  65. {
  66. private:
  67.     LONG32 m_lRefCount;
  68.     BOOL m_bInUnHookAll;
  69.     BOOL m_bNeedFocus;
  70.     CHXMapPtrToPtr m_MasterListOfSites;
  71.     CHXMapStringToOb m_ChannelsToLists;
  72.     CHXMapStringToOb m_LSGNamesToLists;
  73.     CHXMapPtrToPtr m_SitesToSUS;
  74.     CHXMapStringToOb m_PersistentChannelsToLists;
  75.     CHXMapStringToOb m_PersistentLSGNamesToLists;
  76.     CHXMapPtrToPtr m_PersistentSitesToSUS;
  77.     CHXMapPtrToPtr m_PendingValueToSUPlayTo;
  78.     CHXMapPtrToPtr m_PendingValueToSUSinglePlayTo;
  79.     CHXMapPtrToPtr m_PendingValueToSULSG;
  80.     CHXMapPtrToPtr m_PendingValueToSUSingleLSG;
  81. #if !defined(HELIX_CONFIG_NOSTATICS)
  82.     static INT32 zm_nSiteManagerCount;
  83. #else
  84.     static const INT32 zm_nSiteManagerCount;
  85. #endif
  86.     CHXMapStringToOb m_EventHookMap;
  87.     CHXSimpleList m_UnnamedEventHookList;
  88.     STDMETHOD(AddSiteByStringHelper) (THIS_
  89.      const char* pString,
  90. IHXSite* pSite,
  91. CHXMapStringToOb& ByStringMap);
  92.     BOOL IsSiteAvailableByStringHelper (const char* pString,
  93. CHXMapStringToOb& ByStringMap);
  94.     BOOL HookupByStringHelper (const char* pString,
  95. CHXMapStringToOb& ByStringMap,
  96. IHXSiteUserSupplier*   pSUS,
  97. BOOL bIsPersistent);
  98.     BOOL HookupSingleSiteByStringHelper (const char* pString,
  99. CHXMapStringToOb& ByStringMap,
  100. IHXSiteUser* pSU,
  101. BOOL bIsPersistent);
  102.     BOOL HookupSite2SUS (IHXSite* pSite, 
  103. IHXSiteUserSupplier*   pSUS,
  104. BOOL bIsPersistent);
  105.     BOOL HookupByLSGNameWithString (IHXSiteUserSupplier*  pSUS, 
  106. char* pActualString,
  107. BOOL bIsPersistent);
  108.     BOOL HookupByPlayToFromWithString (IHXSiteUserSupplier*  pSUS, 
  109. char* pActualString,
  110. BOOL bIsPersistent);
  111.     BOOL HookupSingleSiteByLSGNameWithString (IHXSiteUser*     pSU,
  112. char*     pActualString,
  113. BOOL     bIsPersistent);
  114.     BOOL HookupSingleSiteByPlayToFromWithString (IHXSiteUser*     pSU,
  115. char*     pActualString,
  116. BOOL     bIsPersistent);
  117.     
  118.     STDMETHOD(AddEventHookElement) (CHXSimpleList*     pList,
  119. CHXEventHookElement*     pElement);
  120.     STDMETHOD(RemoveEventHookElement) (CHXSimpleList*     pList,
  121. IHXEventHook*     pHook,
  122. UINT16     uLayer);
  123.     enum EVENT_TYPE
  124.     {
  125.         SITE_EVENT_GENERAL = 0,
  126.         SITE_EVENT_REMOVED,
  127.         SITE_EVENT_ADDED
  128.     };
  129.     enum PTR_TYPE
  130.     {
  131.         SITE_USER_SUPPLIER = 0,
  132.         SITE_USER
  133.     };
  134.     enum HOOK_TYPE
  135.     {
  136.         HOOKUP_BY_LSGNAMEWITHSTRING = 0,
  137.         HOOKUP_BY_PLAYTOFROMWITHSTRING,
  138.         HOOKUP_SINGLESITE_BY_LSGNAMEWITHSTRING,
  139.         HOOKUP_SINGLESITE_BY_PLAYTOFROMWITHSTRING
  140.     };
  141.     HX_RESULT   ProcessSiteEvent        (CHXEventHookElement* pElement, IHXSite* pSite, 
  142.                                         HXxEvent* pEvent, EVENT_TYPE event_type);
  143.     HX_RESULT   HandleSiteEvent         (const char* pRegionName, IHXSite* pSite, 
  144.                                         HXxEvent* pEvent, EVENT_TYPE event_type);
  145.     void        HookupHelper            (CHXMapPtrToPtr* pMap, char* pActualString, BOOL bIsPersistent, 
  146.                                         PTR_TYPE ptr_type, HOOK_TYPE hook_type);
  147.     void        RemoveMapStrToObj       (CHXMapStringToOb* pMap);
  148.     void        RemoveMapPtrToPtr       (CHXMapPtrToPtr* pMap);
  149.     void        RemoveList              (CHXSimpleList* pList);
  150.     void CleanupPendingValues();
  151.     ~CHXSiteManager();
  152.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  153. public:
  154.     CHXSiteManager();
  155.     
  156.     /*
  157.      * IUnknown methods
  158.      */
  159.     STDMETHOD(QueryInterface) (THIS_
  160. REFIID riid,
  161. void** ppvObj);
  162.     STDMETHOD_(ULONG32,AddRef) (THIS);
  163.     STDMETHOD_(ULONG32,Release) (THIS);
  164.     /************************************************************************
  165.      * Method:
  166.      *     IHXSiteManager::AddSite
  167.      * Purpose:
  168.      *   Called to inform the site manager of the existance of a site.
  169.      */
  170.     STDMETHOD(AddSite) (THIS_
  171. IHXSite* pSite);
  172.     /************************************************************************
  173.      * Method:
  174.      *     IHXSiteManager::RemoveSite
  175.      * Purpose:
  176.      *   Called to inform the site manager that a site is no longer 
  177.      *   available.
  178.      */
  179.     STDMETHOD(RemoveSite) (THIS_
  180. IHXSite* pSite);
  181.     /*
  182.      * IHXEventHookMgr methods
  183.      */
  184.     /************************************************************************
  185.      *  Method:
  186.      *      IHXEventHookMgr::AddHook
  187.      *  Purpose:
  188.      *    Called to set an event hook that will get events from a site
  189.      *
  190.      */
  191.     STDMETHOD(AddHook) (THIS_
  192.      IHXEventHook* pHook,
  193. const char* pRegionName,
  194. UINT16 uLayer);
  195.     /************************************************************************
  196.      *  Method:
  197.      *      IHXEventHookMgr::RemoveHook
  198.      *  Purpose:
  199.      *    Called to remove an event hook set in AddHook()
  200.      *
  201.      */
  202.     STDMETHOD(RemoveHook) (THIS_
  203.      IHXEventHook* pHook,
  204. const char* pRegionName,
  205. UINT16 uLayer);
  206.     /************************************************************************
  207.      * Method:
  208.      *     IHXSiteManager2::GetNumberOfSites
  209.      * Purpose:
  210.      *   Called to get the number of sites that the site mananger currently 
  211.      *    knows about.
  212.      */
  213.     STDMETHOD(GetNumberOfSites) (THIS_  REF(UINT32) nNumSites );
  214.     /************************************************************************
  215.      * Method:
  216.      *     IHXSiteManager2::GetSiteAt
  217.      * Purpose:
  218.      *   Used to iterate over the sites.
  219.      *   
  220.      */
  221.     STDMETHOD(GetSiteAt) (THIS_ UINT32 nIndex, REF(IHXSite*) pSite);
  222. public:
  223.     /*
  224.      * Methods called internally in PN only code...
  225.      */
  226.     BOOL IsSiteAvailableByPlayToFrom(IHXValues*     pProps,
  227.     BOOL     bIsPersistent);
  228.     BOOL IsSiteAvailableByLSGName   (IHXValues*     pProps,
  229.     BOOL     bIsPersistent);
  230.     void UnhookSite     (IHXSite*     pSite,
  231.     BOOL     bIsPersistent);
  232.     void UnhookAll     ();
  233.     void RemoveSitesByLSGName     (IHXValues*     pProps,
  234.     BOOL     bIsPersistent);
  235.     BOOL HookupByLSGName     (IHXSiteUserSupplier*  pSUS, 
  236.     IHXValues*     pProps,
  237.     BOOL     bIsPersistent);
  238.     BOOL HookupByPlayToFrom     (IHXSiteUserSupplier*  pSUS, 
  239.     IHXValues*     pProps,
  240.     BOOL     bIsPersistent);
  241.     BOOL HookupSingleSiteByLSGName  (IHXSiteUser*     pSU,
  242.     IHXValues*     pProps,
  243.     BOOL     bIsPersistent);
  244.     BOOL HookupSingleSiteByPlayToFrom(IHXSiteUser*     pSU,
  245.     IHXValues*     pProps,
  246.     BOOL     bIsPersistent);
  247.     // mac only
  248.     static void EventOccurred(HXxEvent* pEvent);
  249.     HX_RESULT HandleHookedEvent (const char* pRegionName,
  250. IHXSite* pSite,
  251. HXxEvent* pEvent);
  252.     void HookedSiteAdded (const char* pRegionName,
  253. IHXSite* pSite);
  254.     void HookedSiteRemoved (const char* pRegionName,
  255. IHXSite* pSite);
  256.     BOOL IsSitePresent              (IHXSite*     pSite);
  257.     void NeedFocus(BOOL bFocus);
  258. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  259. static CHXSimpleList zm_SiteManagerList;
  260. static BOOL  zm_bWindowRemovedFromList;
  261. // friend class  CHXSiteWindowed;
  262. #endif
  263. };
  264. #endif // _SITEMGR_H_