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

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 _HXPROPW_H_
  36. #define _HXPROPW_H_
  37. class HXClientRegistry;
  38. class CHXSimpleList;
  39. struct IHXScheduler;
  40. struct IHXInterruptSafe;
  41. struct IHXInterruptState;
  42. #include "hxengin.h"
  43. #include "hxmon.h"
  44. typedef enum 
  45. {
  46.     ADDEDPROP = 0,
  47.     MODIFIEDPROP,
  48.     DELETEDPROP
  49. } ResponseType;
  50. struct PropResponseValues
  51. {
  52.     PropResponseValues(ResponseType uResponseType,
  53.        const UINT32 id,
  54.        const HXPropType    propType,
  55.        const UINT32 ulParentID)
  56.     {
  57. m_uResponseType = uResponseType;
  58. m_ulId = id;
  59. m_propType = propType;
  60. m_ulParentID = ulParentID;
  61.     };
  62.     ResponseType m_uResponseType;
  63.     UINT32 m_ulId;
  64.     HXPropType    m_propType;
  65.     UINT32 m_ulParentID;
  66. };
  67. class HXClientPropWatch : public IHXPropWatch
  68. {
  69. private:
  70. virtual ~HXClientPropWatch();
  71.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  72.     LONG32 m_lRefCount;
  73.     IHXPropWatchResponse* m_pResponse;
  74.     CommonRegistry* m_pRegistry;
  75.     IHXInterruptSafe* m_pInterruptSafeResponse;
  76.     IHXInterruptState* m_pInterruptState;
  77.     IHXScheduler* m_pScheduler;
  78.   
  79. public:
  80. HXClientPropWatch(CommonRegistry* pRegistry,
  81.   IUnknown* pContext);
  82.     
  83.     /*
  84.      * IUnknown methods
  85.      */
  86.     STDMETHOD(QueryInterface) (THIS_
  87. REFIID riid,
  88. void** ppvObj);
  89.     STDMETHOD_(ULONG32,AddRef) (THIS);
  90.     STDMETHOD_(ULONG32,Release) (THIS);
  91.     /*
  92.      * IHXPropWatch methods
  93.      */
  94.     /************************************************************************
  95.      *  Method:
  96.      *      IHXPropWatch::Init
  97.      *  Purpose:
  98.      *      Initialize with the response object and the registry so that
  99.      *  Watch notifications can be sent back to the respective plugins.
  100.      */
  101.     STDMETHOD(Init) (THIS_
  102. IHXPropWatchResponse* pResponse);
  103.     /************************************************************************
  104.      *  Method:
  105.      *      IHXPropWatch::SetWatchOnRoot
  106.      *  Purpose:
  107.      *      The SetWatch method puts a watch at the highest level of
  108.      *  the registry hierarchy. It notifies ONLY IF properties at THIS LEVEL
  109.      *  get added/modified/deleted.
  110.      */
  111.     STDMETHOD_(UINT32, SetWatchOnRoot) (THIS);
  112.     /************************************************************************
  113.      *  Method:
  114.      *      IHXPropWatch::SetWatchByXXX
  115.      *  Purpose:
  116.      *      Sets a watch-point on the Property whose name or id is
  117.      *  specified. In case the mentioned Property gets modified or deleted
  118.      *  a notification of that will be sent to the object which set the
  119.      *  watch-point.
  120.      */
  121.     STDMETHOD_(UINT32, SetWatchByName) (THIS_
  122. const char* pName);
  123.     STDMETHOD_(UINT32, SetWatchById) (THIS_
  124. const UINT32 id);
  125.     /************************************************************************
  126.      *  Method:
  127.      *      IHXPropWatch::ClearWatchOnRoot
  128.      *  Purpose:
  129.      *      Clears the watch on the root of registry.
  130.      */
  131.     STDMETHOD(ClearWatchOnRoot) (THIS);
  132.  
  133.     /************************************************************************
  134.      *  Method:
  135.      *      IHXPropWatch::ClearWatch
  136.      *  Purpose:
  137.      *      Clears a watch-point based on the Property's name or id.
  138.      */
  139.     STDMETHOD(ClearWatchByName) (THIS_
  140. const char* pName);
  141.     STDMETHOD(ClearWatchById) (THIS_
  142. const UINT32 id);
  143.     class PropWatchCallback : public IHXCallback
  144.     {
  145. public:
  146.     HXClientPropWatch*     m_pPropWatch;
  147.     CallbackHandle     m_PendingHandle;
  148.     BOOL     m_bIsCallbackPending;
  149. PropWatchCallback(HXClientPropWatch* pClientPropWatch);
  150.     /*
  151.      * IUnknown methods
  152.      */
  153.     STDMETHOD(QueryInterface) (THIS_
  154.     REFIID riid,
  155.     void** ppvObj);
  156.     STDMETHOD_(ULONG32,AddRef) (THIS);
  157.     STDMETHOD_(ULONG32,Release) (THIS);
  158.     /*
  159.      * IHXCallback methods
  160.      */
  161.     STDMETHOD(Func) (THIS);
  162. protected:
  163.     ~PropWatchCallback();
  164.     LONG32     m_lRefCount;
  165.     };
  166.     class PropWatchResponse : public IHXPropWatchResponse
  167.     {
  168. public:
  169.     HXClientPropWatch*     m_pPropWatch;
  170.     PropWatchResponse(HXClientPropWatch* pClientPropWatch);
  171.     void ProcessPendingResponses();
  172.     /*
  173.      * IUnknown methods
  174.      */
  175.     STDMETHOD(QueryInterface) (THIS_
  176.     REFIID riid,
  177.     void** ppvObj);
  178.     STDMETHOD_(ULONG32,AddRef) (THIS);
  179.     STDMETHOD_(ULONG32,Release) (THIS);
  180.     /*
  181.      * IHXPropWatchResponse methods
  182.      */
  183.     STDMETHOD(AddedProp) (THIS_
  184. const UINT32 id,
  185. const HXPropType    propType,
  186. const UINT32 ulParentID);
  187.     STDMETHOD(ModifiedProp) (THIS_
  188. const UINT32 id,
  189. const HXPropType    propType,
  190. const UINT32 ulParentID);
  191.     STDMETHOD(DeletedProp) (THIS_
  192. const UINT32 id,
  193. const UINT32 ulParentID);
  194. protected:
  195.     void ScheduleCallback(ResponseType uResponseType,
  196.      const UINT32 id,
  197.      const HXPropType    propType,
  198.      const UINT32 ulParentID);
  199.     ~PropWatchResponse();
  200.     LONG32     m_lRefCount;
  201.     CHXSimpleList*  m_pPendingResponseList;
  202.     };
  203.     friend class PropWatchResponse;
  204.     friend class PropWatchCallback;
  205.     PropWatchResponse*     m_pInternalResponse;
  206.     PropWatchCallback*     m_pCallback;
  207. };
  208. #endif // _HXPROPW_H_