diff options
author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-30 16:58:36 +0000 |
---|---|---|
committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-30 16:58:36 +0000 |
commit | b05c4a84c84fbbef2a410338a2d08eb255e33ca9 (patch) | |
tree | b9e2f40ea2d0f4ecc92bf8113e68d6d45b0e98ff /cpp/src/qmf/engine/Agent.cpp | |
parent | efb46cb737b1e1bff61fb5409fc39838d8ed0d2e (diff) | |
download | qpid-python-b05c4a84c84fbbef2a410338a2d08eb255e33ca9.tar.gz |
QMF: Agent now sends class indications for schema added after attachement completes.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@939736 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qmf/engine/Agent.cpp')
-rw-r--r-- | cpp/src/qmf/engine/Agent.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/cpp/src/qmf/engine/Agent.cpp b/cpp/src/qmf/engine/Agent.cpp index 7667213e5e..64c5961385 100644 --- a/cpp/src/qmf/engine/Agent.cpp +++ b/cpp/src/qmf/engine/Agent.cpp @@ -127,6 +127,7 @@ namespace engine { deque<AgentEventImpl::Ptr> eventQueue; deque<MessageImpl::Ptr> xmtQueue; map<uint32_t, AgentQueryContext::Ptr> contextMap; + bool attachComplete; static const char* QMF_EXCHANGE; static const char* DIR_EXCHANGE; @@ -235,7 +236,7 @@ AgentImpl::AgentImpl(char* _label, bool i) : label(_label), queueName("qmfa-"), internalStore(i), nextTransientId(1), requestedBrokerBank(0), requestedAgentBank(0), assignedBrokerBank(0), assignedAgentBank(0), - bootSequence(1), nextObjectId(1), nextContextNum(1) + bootSequence(1), nextObjectId(1), nextContextNum(1), attachComplete(false) { queueName += label; } @@ -425,35 +426,53 @@ void AgentImpl::queryComplete(uint32_t sequence) void AgentImpl::registerClass(SchemaObjectClass* cls) { Mutex::ScopedLock _lock(lock); + bool newPackage = false; map<string, ClassMaps>::iterator iter = packages.find(cls->getClassKey()->getPackageName()); if (iter == packages.end()) { packages[cls->getClassKey()->getPackageName()] = ClassMaps(); iter = packages.find(cls->getClassKey()->getPackageName()); - // TODO: Indicate this package if connected + newPackage = true; } AgentClassKey key(cls->getClassKey()->getClassName(), cls->getClassKey()->getHash()); iter->second.objectClasses[key] = cls; - // TODO: Indicate this schema if connected. + // Indicate this new schema if connected. + + if (attachComplete) { + + if (newPackage) { + sendPackageIndicationLH(iter->first); + } + sendClassIndicationLH(CLASS_OBJECT, iter->first, key); + } } void AgentImpl::registerClass(SchemaEventClass* cls) { Mutex::ScopedLock _lock(lock); + bool newPackage = false; map<string, ClassMaps>::iterator iter = packages.find(cls->getClassKey()->getPackageName()); if (iter == packages.end()) { packages[cls->getClassKey()->getPackageName()] = ClassMaps(); iter = packages.find(cls->getClassKey()->getPackageName()); - // TODO: Indicate this package if connected + newPackage = true; } AgentClassKey key(cls->getClassKey()->getClassName(), cls->getClassKey()->getHash()); iter->second.eventClasses[key] = cls; - // TODO: Indicate this schema if connected. + // Indicate this new schema if connected. + + if (attachComplete) { + + if (newPackage) { + sendPackageIndicationLH(iter->first); + } + sendClassIndicationLH(CLASS_EVENT, iter->first, key); + } } const ObjectId* AgentImpl::addObject(Object&, uint64_t) @@ -662,6 +681,8 @@ void AgentImpl::handleAttachResponse(Buffer& inBuffer) cIter != cMap.eventClasses.end(); cIter++) sendClassIndicationLH(CLASS_EVENT, pIter->first, cIter->first); } + + attachComplete = true; } void AgentImpl::handlePackageRequest(Buffer&) |