sharkcz / rpms / qpid-cpp

Forked from rpms/qpid-cpp 6 years ago
Clone
Blob Blame History Raw
Index: cpp/src/qmf/engine/ObjectImpl.h
===================================================================
--- cpp/src/qmf/engine/ObjectImpl.h	(revision 831913)
+++ cpp/src/qmf/engine/ObjectImpl.h	(working copy)
@@ -56,7 +56,7 @@
 
         void destroy();
         const ObjectId* getObjectId() const { return objectId.get(); }
-        void setObjectId(ObjectId* oid) { objectId.reset(oid); }
+        void setObjectId(ObjectId* oid) { objectId.reset(new ObjectId(*oid)); }
         const SchemaObjectClass* getClass() const { return objectClass; }
         Value* getValue(const std::string& key) const;
         void invokeMethod(const std::string& methodName, const Value* inArgs, void* context) const;
Index: cpp/src/qpid/management/ManagementAgent.h
===================================================================
--- cpp/src/qpid/management/ManagementAgent.h	(revision 831913)
+++ cpp/src/qpid/management/ManagementAgent.h	(working copy)
@@ -113,11 +113,13 @@
     //
     struct RemoteAgent : public Manageable
     {
+        ManagementAgent&  agent;
         uint32_t          brokerBank;
         uint32_t          agentBank;
         std::string       routingKey;
         ObjectId          connectionRef;
         qmf::org::apache::qpid::broker::Agent*    mgmtObject;
+        RemoteAgent(ManagementAgent& _agent) : agent(_agent) {}
         ManagementObject* GetManagementObject (void) const { return mgmtObject; }
         virtual ~RemoteAgent ();
     };
@@ -212,6 +214,7 @@
 
     void writeData ();
     void periodicProcessing (void);
+    void deleteObjectNowLH(const ObjectId& oid);
     void encodeHeader       (framing::Buffer& buf, uint8_t  opcode, uint32_t  seq = 0);
     bool checkHeader        (framing::Buffer& buf, uint8_t *opcode, uint32_t *seq);
     void sendBuffer         (framing::Buffer&             buf,
Index: cpp/src/qpid/management/ManagementAgent.cpp
===================================================================
--- cpp/src/qpid/management/ManagementAgent.cpp	(revision 831913)
+++ cpp/src/qpid/management/ManagementAgent.cpp	(working copy)
@@ -44,9 +44,11 @@
 
 ManagementAgent::RemoteAgent::~RemoteAgent ()
 {
-    if (mgmtObject != 0)
+    QPID_LOG(trace, "Remote Agent removed bank=[" << brokerBank << "." << agentBank << "]");
+    if (mgmtObject != 0) {
         mgmtObject->resourceDestroy();
-    QPID_LOG(trace, "Remote Agent removed bank=[" << brokerBank << "." << agentBank << "]");
+        agent.deleteObjectNowLH(mgmtObject->getObjectId());
+    }
 }
 
 ManagementAgent::ManagementAgent () :
@@ -443,6 +445,32 @@
     }
 }
 
+void ManagementAgent::deleteObjectNowLH(const ObjectId& oid)
+{
+    ManagementObjectMap::iterator iter = managementObjects.find(oid);
+    if (iter == managementObjects.end())
+        return;
+    ManagementObject* object = iter->second;
+    if (!object->isDeleted())
+        return;
+
+#define DNOW_BUFSIZE 2048
+    char     msgChars[DNOW_BUFSIZE];
+    uint32_t contentSize;
+    Buffer   msgBuffer(msgChars, DNOW_BUFSIZE);
+
+    encodeHeader(msgBuffer, 'c');
+    object->writeProperties(msgBuffer);
+    contentSize = msgBuffer.getPosition();
+    msgBuffer.reset();
+    stringstream key;
+    key << "console.obj.1.0." << object->getPackageName() << "." << object->getClassName();
+    sendBuffer(msgBuffer, contentSize, mExchange, key.str());
+    QPID_LOG(trace, "SEND Immediate(delete) ContentInd to=" << key.str());
+
+    managementObjects.erase(oid);
+}
+
 void ManagementAgent::sendCommandComplete (string replyToKey, uint32_t sequence,
                                             uint32_t code, string text)
 {
@@ -871,7 +899,7 @@
 
     assignedBank = assignBankLH(requestedAgentBank);
 
-    RemoteAgent* agent = new RemoteAgent;
+    RemoteAgent* agent = new RemoteAgent(*this);
     agent->brokerBank = brokerBank;
     agent->agentBank  = assignedBank;
     agent->routingKey = replyToKey;
Index: cpp/bindings/qmf/ruby/qmf.rb
===================================================================
--- cpp/bindings/qmf/ruby/qmf.rb	(revision 831913)
+++ cpp/bindings/qmf/ruby/qmf.rb	(working copy)
@@ -456,7 +456,7 @@
     attr_reader :impl, :agent_key
     def initialize(impl=nil)
       if impl
-        @impl = impl
+        @impl = Qmfengine::ObjectId.new(impl)
       else
         @impl = Qmfengine::ObjectId.new
       end
@@ -594,7 +594,7 @@
     attr_reader :impl
     def initialize(kwargs = {})
       if kwargs.include?(:impl)
-        @impl = kwargs[:impl]
+        @impl = Qmfengine::Query.new(kwargs[:impl])
       else
         package = ''
         if kwargs.include?(:key)