/// \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 ConnectedAdapter::eat(Eris::Entity* entity) { try { Atlas::Objects::Entity::Anonymous what; what->setId(entity->getId()); Atlas::Objects::Operation::Generic op; op->setType("eat", -1); op->setFrom(mAvatar.getEntity()->getId()); op->setArgs1(what); S_LOG_INFO("Eating entity with id " << entity->getId() << ", named " << entity->getName()); mConnection.send(op); } catch (const std::exception& ex) { S_LOG_WARNING("Got error on eating entity." << ex); } }