sharkcz / rpms / qpid-cpp

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