本文整理汇总了C++中yarp::os::Bottle::tail方法的典型用法代码示例。如果您正苦于以下问题:C++ Bottle::tail方法的具体用法?C++ Bottle::tail怎么用?C++ Bottle::tail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类yarp::os::Bottle
的用法示例。
在下文中一共展示了Bottle::tail方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: respond
bool DispatcherManager::respond(const yarp::os::Bottle& cmd, yarp::os::Bottle& reply) {
bool success = false;
try {
switch(cmd.get(0).asVocab()) {
case VOCAB4('h','e','l','p'): // print help information
reply.add(yarp::os::Value::makeVocab("help"));
reply.addString("Event Manager configuration options");
reply.addString(" help Displays this message");
reply.addString(" list Print a list of available event listeners");
reply.addString(" add type [type2 ...] Adds one or more event listeners");
reply.addString(" remove [all|idx] Removes event listener at an index or all");
reply.addString(" set [all|idx] Configures a listener");
reply.addString(" stats Prints information");
success = true;
break;
case VOCAB4('l','i','s','t'): // print list of available event listeners
{
reply.add(yarp::os::Value::makeVocab("help"));
std::vector<std::string> keys = FactoryT<std::string, IEventListener>::instance().getKeys();
for(unsigned int i = 0; i < keys.size(); i++) {
reply.addString((std::string(" ") + keys[i]).c_str());
}
success = true;
break;
}
case VOCAB3('a','d','d'): // add
{ // prevent identifier initialization to cross borders of case
yarp::os::Bottle list = cmd.tail();
for(int i = 0; i < list.size(); i++) {
IEventListener* listener = this->factory->create(list.get(i).asString().c_str());
listener->start();
this->dispatcher->addListener(listener);
}
reply.addString("Successfully added listener(s)");
success = true;
break;
}
case VOCAB4('r','e','m','o'): // remove
case VOCAB3('d','e','l'): // del(ete)
{ // prevent identifier initialization to cross borders of case
if(cmd.get(1).isInt() && cmd.get(1).asInt() >= 1 && cmd.get(1).asInt() <= this->dispatcher->countListeners()) {
this->dispatcher->removeListener(cmd.get(1).asInt()-1);
reply.addString("Successfully removed listener.");
success = true;
} else if(cmd.get(1).asString() == "all") {
this->dispatcher->clear();
reply.addString("Successfully removed all listeners.");
success = true;
} else {
throw std::runtime_error("Illegal index!");
}
break;
}
case VOCAB3('s','e','t'): // set
{ // prevent identifier initialization to cross borders of case
yarp::os::Bottle property;
property.addList() = cmd.tail().tail(); // see comment in TrainModule
std::string replymsg = "Setting configuration option ";
if(cmd.get(1).isInt() && cmd.get(1).asInt() >= 1 &&
cmd.get(1).asInt() <= this->dispatcher->countListeners()) {
bool ok = this->dispatcher->getAt(cmd.get(1).asInt()-1).configure(property);
replymsg += ok ? "succeeded" :
"failed; please check key and value type.";
reply.addString(replymsg.c_str());
success = true;
} else if(cmd.get(1).asString() == "all") {
for(int i = 0; i < this->dispatcher->countListeners(); i++) {
if(i > 0) {
replymsg += ", ";
}
bool ok = this->dispatcher->getAt(i).configure(property);
replymsg += ok ? "succeeded" :
"failed; please check key and value type.";
}
replymsg += ".";
reply.addString(replymsg.c_str());
success = true;
} else {
throw std::runtime_error("Illegal index!");
}
break;
}
case VOCAB4('i','n','f','o'): // information
case VOCAB4('s','t','a','t'): // statistics
{ // prevent identifier initialization to cross borders of case
reply.add(yarp::os::Value::makeVocab("help"));
std::ostringstream buffer;
buffer << "Event Manager Information (" << this->dispatcher->countListeners() << " listeners)";
reply.addString(buffer.str().c_str());
for(int i = 0; i < this->dispatcher->countListeners(); i++) {
buffer.str(""); // why isn't there a proper reset method?
//.........这里部分代码省略.........
示例2: apply
bool NameServiceOnTriples::apply(yarp::os::Bottle& cmd,
yarp::os::Bottle& reply,
yarp::os::Bottle& event,
const yarp::os::Contact& remote) {
ConstString key = cmd.get(0).toString();
ConstString prefix = " * ";
access.wait();
if (key=="register") {
lastRegister = cmd.get(1).asString().c_str();
} else if (key=="set") {
if (cmd.get(1).asString()==lastRegister.c_str()) {
prefix = " + ";
}
} else {
lastRegister = "";
}
if (!silent) {
printf("%s%s\n",
prefix.c_str(),
cmd.toString().c_str());
}
access.post();
TripleSource& mem = *db;
//mem.begin();
mem.reset();
reply.clear();
NameTripleState act(cmd,reply,event,remote,mem);
if (cmd.check("format")) {
if (cmd.find("format")=="json") {
act.bottleMode = true;
}
}
if (key == "NAME_SERVER") {
cmd = cmd.tail();
key = cmd.get(0).asString();
}
if (key == "bot") {
act.bottleMode = true;
cmd = cmd.tail();
key = cmd.get(0).asString();
}
if (key=="register") {
return cmdRegister(act);
} else if (key=="unregister") {
return cmdUnregister(act);
} else if (key=="query") {
return cmdQuery(act);
} else if (key=="list") {
return cmdList(act);
} else if (key=="set") {
return cmdSet(act);
} else if (key=="get") {
return cmdGet(act);
} else if (key=="check") {
return cmdCheck(act);
} else if (key=="route") {
return cmdRoute(act);
} else if (key=="gc") {
return cmdGc(act);
} else if (key=="help") {
return cmdHelp(act);
} else {
// not understood
act.reply.addString("old");
}
//mem.end();
return true;
}
示例3: respond
//.........这里部分代码省略.........
break;
case VOCAB4('i','n','f','o'): // information
case VOCAB4('s','t','a','t'): // statistics
{ // prevent identifier initialization to cross borders of case
reply.add(yarp::os::Value::makeVocab("help"));
reply.addString("Machine Information: ");
reply.addString(this->getMachine().getInfo().c_str());
success = true;
break;
}
case VOCAB4('l','o','a','d'): // load
{ // prevent identifier initialization to cross borders of case
reply.add(yarp::os::Value::makeVocab("help"));
std::string replymsg = std::string("Loading machine from '") +
cmd.get(1).asString().c_str() + "'... " ;
if(!cmd.get(1).isString()) {
replymsg += "failed";
} else {
this->getMachinePortable().readFromFile(cmd.get(1).asString().c_str());
replymsg += "succeeded";
}
reply.addString(replymsg.c_str());
success = true;
break;
}
case VOCAB4('s','a','v','e'): // save
{ // prevent identifier initialization to cross borders of case
reply.add(yarp::os::Value::makeVocab("help"));
std::string replymsg = std::string("Saving machine to '") +
cmd.get(1).asString().c_str() + "'... " ;
if(!cmd.get(1).isString()) {
replymsg += "failed";
} else {
this->getMachinePortable().writeToFile(cmd.get(1).asString().c_str());
replymsg += "succeeded";
}
reply.addString(replymsg.c_str());
success = true;
break;
}
case VOCAB3('s','e','t'): // set a configuration option for the machine
{ // prevent identifier initialization to cross borders of case
yarp::os::Bottle property;
/*
* This is a simple hack to enable multiple parameters The need
* for this hack lies in the fact that a group can only be found
* using findGroup if it is a nested list in a Bottle. If the
* Bottle itself is the list, then the group will _not_ be found.
*/
property.addList() = cmd.tail();
std::string replymsg = "Setting configuration option ";
bool ok = this->getMachine().configure(property);
replymsg += ok ? "succeeded" :
"failed; please check key and value type.";
reply.addString(replymsg.c_str());
success = true;
break;
}
case VOCAB4('e','v','e','n'): // event
{ // prevent identifier initialization to cross borders of case
success = this->dmanager.respond(cmd.tail(), reply);
break;
}
case VOCAB3('c','m','d'): // cmd
case VOCAB4('c','o','m','m'): // command
{ // prevent identifier initialization to cross borders of case
reply.add(yarp::os::Value::makeVocab("help"));
std::string replymsg;
if(!cmd.get(1).isString()) {
replymsg = "Please supply a valid filename.";
} else {
std::string full_fname = this->findFile(cmd.get(1).asString().c_str());
replymsg = std::string("Loading commands from '") +
full_fname + "'... " ;
this->loadCommandFile(full_fname, &reply);
replymsg += "succeeded";
}
reply.addString(replymsg.c_str());
success = true;
break;
}
default:
break;
}
} catch(const std::exception& e) {
std::string msg = std::string("Error: ") + e.what();
reply.addString(msg.c_str());
success = true;
}
return success;
}