/// \brief Handle a relay operation void Entity::RelayOperation(const Operation & op, OpVector & res) { if (op->getArgs().empty()) { log(ERROR, "Entity::RelayOperation no args."); return; } Operation relayedOp = Atlas::Objects::smart_dynamic_cast<Operation>( op->getArgs().front()); if (!relayedOp.isValid()) { log(ERROR, "Entity::RelayOperation first arg is not an operation."); return; } if (op->isDefaultSerialno()) { log(ERROR, "Entity::RelayOperation no serial number."); return; } //Add a sight of the operation Sight sight; sight->setArgs1(relayedOp); Atlas::Objects::Operation::Generic responseOp; responseOp->setType("relay", Atlas::Objects::Operation::RELAY_NO); responseOp->setArgs1(sight); responseOp->setTo(op->getFrom()); res.push_back(responseOp); //Make sure that the contained op is addressed to the entity relayedOp->setTo(getId()); operation(relayedOp, res); }
void Router::buildError(const Operation & op, const std::string & errstring, const Operation & e, const std::string & to) const { std::vector<Atlas::Objects::Root> & args = e->modifyArgs(); Atlas::Objects::Entity::Anonymous arg1; arg1->setAttr("message", errstring); args.push_back(arg1); args.push_back(op); if (!to.empty()) { if (!op->isDefaultSerialno()) { e->setRefno(op->getSerialno()); } e->setTo(to); } }