(file) Return to ConsumerManager.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / DynListener

  1 karl  1.4 //%2006////////////////////////////////////////////////////////////////////////
  2 h.sterling 1.1 //
  3                // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4                // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5                // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6                // IBM Corp.; EMC Corporation, The Open Group.
  7                // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8                // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9                // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10                // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 karl       1.4 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12                // EMC Corporation; Symantec Corporation; The Open Group.
 13 h.sterling 1.1 //
 14                // Permission is hereby granted, free of charge, to any person obtaining a copy
 15                // of this software and associated documentation files (the "Software"), to
 16                // deal in the Software without restriction, including without limitation the
 17                // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18                // sell copies of the Software, and to permit persons to whom the Software is
 19                // furnished to do so, subject to the following conditions:
 20                // 
 21                // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22                // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23                // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24                // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25                // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26                // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27                // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28                // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29                //
 30                //==============================================================================
 31                //
 32                // Author: Heather Sterling (hsterl@us.ibm.com)
 33                //
 34 h.sterling 1.1 // Modified By: 
 35                //
 36                //%/////////////////////////////////////////////////////////////////////////////
 37                
 38                #ifndef Pegasus_ConsumerManager_h
 39                #define Pegasus_ConsumerManager_h
 40                
 41                #include <Pegasus/Common/Config.h>
 42                #include <Pegasus/Common/HashTable.h>
 43                #include <Pegasus/Common/OptionManager.h>
 44                #include <Pegasus/Common/ArrayInternal.h>
 45                #include <Pegasus/Common/CIMInstance.h>
 46                #include <Pegasus/Consumer/CIMIndicationConsumer.h>
 47                #include <Pegasus/Common/System.h>
 48                #include <Pegasus/DynListener/Linkage.h>
 49                
 50                #include "ConsumerModule.h"
 51                #include "DynamicConsumer.h"
 52                
 53                PEGASUS_NAMESPACE_BEGIN
 54                
 55 h.sterling 1.1 /** The ConsumerManager class is responsible for managing all of the consumers.  It is also responsible for
 56                 *  synchronizing consumer operations.
 57                 */
 58                
 59                class PEGASUS_DYNLISTENER_LINKAGE ConsumerManager
 60                {
 61                public:
 62                
 63                    ConsumerManager(const String& consumerDir, const String& consumerConfigDir, Boolean enableConsumerUnload, Uint32 idleTimeout);
 64                
 65                    virtual ~ConsumerManager();
 66                
 67                    String getConsumerDir();
 68                
 69                    String getConsumerConfigDir();
 70                
 71                    Boolean getEnableConsumerUnload();
 72                
 73                    Uint32 getIdleTimeout();
 74                
 75                    Boolean hasLoadedConsumers();
 76 h.sterling 1.1 
 77                    Boolean hasActiveConsumers();
 78                
 79                    DynamicConsumer* getConsumer(const String& consumerName);
 80                
 81                    void unloadConsumer(const String& consumerName);
 82                
 83                    void unloadAllConsumers();
 84                
 85                    void unloadIdleConsumers();
 86                
 87                private:
 88                
 89                    typedef HashTable<String, DynamicConsumer *, EqualFunc<String>,  HashFunc<String> > ConsumerTable;
 90                
 91                    typedef HashTable<String, ConsumerModule *, EqualFunc<String>, HashFunc<String> > ModuleTable;
 92                
 93                    //consumer queue
 94                    ConsumerTable _consumers;
 95                    Mutex _consumerTableMutex;
 96                
 97 h.sterling 1.1     //consumer module queue
 98                    ModuleTable _modules;
 99                    Mutex _moduleTableMutex;
100                
101                    //config properties
102                    String _consumerDir;
103                    String _consumerConfigDir;
104                    Boolean _enableConsumerUnload;
105                    Uint32 _idleTimeout; //ms
106                    Boolean _forceShutdown;
107                
108 h.sterling 1.2 	//ATTN: Bugzilla 3765 - Uncomment when OptionManager has a reset capability
109                	//OptionManager _optionMgr;
110                
111 h.sterling 1.1     //global thread pool
112                    ThreadPool* _thread_pool;
113                
114                    //worker thread
115 mike       1.5     static ThreadReturnType PEGASUS_THREAD_CDECL _worker_routine(void *param);
116 h.sterling 1.1 
117                
118                    //methods
119                
120                    ConsumerModule* _lookupModule(const String & moduleFileName);
121                 
122                    String _getConsumerLibraryName(const String & consumerName);
123                
124                    void _initConsumer(const String& consumerName, DynamicConsumer* consumer);
125                
126                    void _unloadConsumers(Array<DynamicConsumer*> consumersToUnload);
127                
128                    void _init();
129                
130 h.sterling 1.3     Array<IndicationDispatchEvent> _deserializeOutstandingIndications(const String& consumerName);
131 h.sterling 1.1 
132 h.sterling 1.3     void _serializeOutstandingIndications(const String& consumerName, Array<IndicationDispatchEvent> indications);
133 h.sterling 1.1 
134                };
135                
136                PEGASUS_NAMESPACE_END
137                
138                #endif /* Pegasus_ConsumerManager_h */
139                
140                
141                

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2