Would it be possible to write an agent in python also? Daryoush
On Wed, Nov 9, 2011 at 2:01 PM, Ken Giusti <[email protected]> wrote: > Hi Daryoush, > > There are some basic examples in qpid/cpp/bindings/qmf2/examples/cpp/ > directory. > > See: > > agent.cpp - an example agent that exposes some method calls (like "echo"). > list_agents.cpp - an example console that listens for agents connecting to > a broker. > > Unfortunately, there are no examples of making method calls (!) > > I've hacked a quick example of calling the "echo" method exported by > agent.cpp. If you apply the patch below to list_agents.cpp (trunk), it > will attempt to call the "echo" method. > > Fire off a broker (qpidd), start the agent.cpp executable (leave it > running), then run the modified list_agents.cpp. > > didn't test it very well, but it should give you an idea... > > > Index: list_agents.cpp > =================================================================== > --- list_agents.cpp (revision 1199840) > +++ list_agents.cpp (working copy) > @@ -21,6 +21,9 @@ > #include <qpid/messaging/Duration.h> > #include <qmf/ConsoleSession.h> > #include <qmf/ConsoleEvent.h> > +#include <qmf/Query.h> > +#include <qmf/Data.h> > +#include <qmf/DataAddr.h> > #include <qmf/Agent.h> > #include <qpid/types/Variant.h> > #include <string> > @@ -60,6 +63,40 @@ > if (event.getAgent().getName() == > session.getConnectedBrokerAgent().getName()) > extra = " [Connected Broker]"; > cout << "Agent Added: " << event.getAgent().getName() << > extra << endl; > + // find the "Profitron" agent > + if (event.getAgent().getVendor() == "profitron.com") { > + Agent myAgent = event.getAgent(); > + // query the agent for its schema > + ConsoleEvent schemaInfo = > event.getAgent().querySchema(); > + // cout << "Schema Count: " << > schemaInfo.getSchemaIdCount() << endl; > + // Find the Schema identifier for the "control" > class... > + for (int i = 0; i < schemaInfo.getSchemaIdCount(); > ++i) { > + SchemaId sid = schemaInfo.getSchemaId(i); > + // cout << "SchemaId: " << sid.getPackageName() > << ":" << sid.getName() << ":" << sid.getHash() << endl; > + if (sid.getName() == "control") { > + // now query the agent for all the "control" > objects - there is only one in this example > + Query q(QUERY_OBJECT_ID, sid); > + ConsoleEvent obj = myAgent.query(q); > + // cout << "Query returned=" << obj.getType() > << endl; > + // "control" is a singleton, so > getDataCount() returns 1 below > + for (int j = 0; j < obj.getDataCount(); ++j) { > + // cout << "addr= " << > obj.getData(j).getAddr().asMap() << endl; > + > + // get the address of the object, so we > can call methods against it: > + DataAddr myObjId = > obj.getData(j).getAddr(); > + // arguments to "echo" method > + Variant::Map args; > + Variant::Map map_data; > + map_data["hello"] = Variant("world!"); > + args["sequence"] = Variant(1); > + args["map"] = map_data; > + // invoke the method synchronously > + ConsoleEvent rc = > event.getAgent().callMethod("echo", args, myObjId); > + cout << "results=" << rc.getArguments() > << endl; > + } > + } > + } > + } > } > if (event.getType() == CONSOLE_AGENT_DEL) { > if (event.getAgentDelReason() == AGENT_DEL_AGED) > > > > > > > ----- Original Message ----- > > I need to find out of if Qpid's QMF would work for a simple RPC > > application that I need to develop. Any samples or tutorials > > showing > > the agent requirements would be greatly appreciated. > > > > Thanks > > Daryoush > > > > --------------------------------------------------------------------- > Apache Qpid - AMQP Messaging Implementation > Project: http://qpid.apache.org > Use/Interact: mailto:[email protected] > > -- Daryoush Weblog: http://onfp.blogspot.com/
