Yet Another Robot Platform

Part of a series of examples on the different ways of using ports. See Port power tutorial.

* Copyright (C) 2006-2019 Istituto Italiano di Tecnologia (IIT)
* Copyright (C) 2006-2010 RobotCub Consortium
* All rights reserved.
* This software may be modified and distributed under the terms of the
* BSD-3-Clause license. See the accompanying LICENSE file for details.
#include <stdio.h>
#include <yarp/os/all.h>
using namespace yarp::os;
class DataProcessor : public TypedReaderCallback<Bottle>, public PortReader {
virtual void onRead(Bottle& b) {
// process data in b
printf("Got one-way message: %s\n", b.toString().c_str());
virtual bool read(ConnectionReader& connection) {
Bottle in, out;
// process data "in", prepare "out"
printf("Got message to reply to: %s\n", in.toString().c_str());
ConnectionWriter *returnToSender = connection.getWriter();
if (returnToSender!=NULL) {
return true;
DataProcessor processor;
int main() {
DataProcessor processor;
p.useCallback(processor); // input should go to processor.onRead()
p.setReplier(processor); // input with replt goes to processor.read()
p.open("/in"); // Give it a name on the network.
while (true) {
printf("main thread free to do whatever it wants\n");
return 0;