diff options
author | Ted Ross <tross@apache.org> | 2008-07-31 13:15:16 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2008-07-31 13:15:16 +0000 |
commit | 9fb5fd7a0a800591c334bde2b9556e984217d7de (patch) | |
tree | c632c481f9cbf647d4ce453ff1076895866fc5e7 /cpp/examples/qmf-agent/example.cpp | |
parent | 033f088884f2e6bbc08d6027e1507b6d67eaad53 (diff) | |
download | qpid-python-9fb5fd7a0a800591c334bde2b9556e984217d7de.tar.gz |
QPID-1174 - Management updates for remote agents
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@681362 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/examples/qmf-agent/example.cpp')
-rw-r--r-- | cpp/examples/qmf-agent/example.cpp | 96 |
1 files changed, 85 insertions, 11 deletions
diff --git a/cpp/examples/qmf-agent/example.cpp b/cpp/examples/qmf-agent/example.cpp index 62d2909410..35ea97d4c0 100644 --- a/cpp/examples/qmf-agent/example.cpp +++ b/cpp/examples/qmf-agent/example.cpp @@ -22,7 +22,10 @@ #include <qpid/management/Manageable.h> #include <qpid/management/ManagementObject.h> #include <qpid/agent/ManagementAgent.h> +#include <qpid/sys/Mutex.h> #include "Parent.h" +#include "Child.h" +#include "ArgsParentCreate_child.h" #include "PackageQmf_example.h" #include <unistd.h> @@ -32,7 +35,14 @@ #include <sstream> using namespace qpid::management; +using namespace qpid::sys; using namespace std; +using qpid::management::ManagementObject; +using qpid::management::Manageable; +using qpid::management::Args; +using qpid::sys::Mutex; + +class ChildClass; //============================================================== // CoreClass is the operational class that corresponds to the @@ -40,21 +50,44 @@ using namespace std; //============================================================== class CoreClass : public Manageable { - string name; + string name; + ManagementAgent* agent; Parent* mgmtObject; + std::vector<ChildClass*> children; + Mutex vectorLock; public: CoreClass(ManagementAgent* agent, string _name); - ~CoreClass() {} + ~CoreClass() { mgmtObject->resourceDestroy(); } + + ManagementObject* GetManagementObject(void) const + { return mgmtObject; } + + void doLoop(); + status_t ManagementMethod (uint32_t methodId, Args& args); +}; + +class ChildClass : public Manageable +{ + string name; + Child* mgmtObject; + +public: - void bumpCounter() { mgmtObject->inc_count(); } + ChildClass(ManagementAgent* agent, CoreClass* parent, string name); + ~ChildClass() { mgmtObject->resourceDestroy(); } ManagementObject* GetManagementObject(void) const { return mgmtObject; } + + void doWork() + { + mgmtObject->inc_count(2); + } }; -CoreClass::CoreClass(ManagementAgent* agent, string _name) : name(_name) +CoreClass::CoreClass(ManagementAgent* _agent, string _name) : name(_name), agent(_agent) { mgmtObject = new Parent(agent, this, name); @@ -62,6 +95,52 @@ CoreClass::CoreClass(ManagementAgent* agent, string _name) : name(_name) mgmtObject->set_state("IDLE"); } +void CoreClass::doLoop() +{ + // Periodically bump a counter to provide a changing statistical value + while (1) { + sleep(1); + mgmtObject->inc_count(); + mgmtObject->set_state("IN LOOP"); + + { + Mutex::ScopedLock _lock(vectorLock); + + for (std::vector<ChildClass*>::iterator iter = children.begin(); + iter != children.end(); + iter++) { + (*iter)->doWork(); + } + } + } +} + +Manageable::status_t CoreClass::ManagementMethod(uint32_t methodId, Args& args) +{ + Mutex::ScopedLock _lock(vectorLock); + + switch (methodId) { + case Parent::METHOD_CREATE_CHILD: + ArgsParentCreate_child& ioArgs = (ArgsParentCreate_child&) args; + + ChildClass *child = new ChildClass(agent, this, ioArgs.i_name); + ioArgs.o_childRef = child->GetManagementObject()->getObjectId(); + + children.push_back(child); + + return STATUS_OK; + } + + return STATUS_NOT_IMPLEMENTED; +} + +ChildClass::ChildClass(ManagementAgent* agent, CoreClass* parent, string name) +{ + mgmtObject = new Child(agent, this, parent, name); + + agent->addObject(mgmtObject); +} + //============================================================== // Main program @@ -79,19 +158,14 @@ int main(int argc, char** argv) { // Start the agent. It will attempt to make a connection to the // management broker - agent->init (string(host), port); + agent->init(string(host), port); // Allocate some core objects CoreClass core1(agent, "Example Core Object #1"); CoreClass core2(agent, "Example Core Object #2"); CoreClass core3(agent, "Example Core Object #3"); - // Periodically bump a counter in core1 to provide a changing statistical value - while (1) - { - sleep(1); - core1.bumpCounter(); - } + core1.doLoop(); } |