Yet Another Robot Platform

Part of a series of examples on the different ways of using ports.

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

* SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
* SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
* SPDX-License-Identifier: BSD-3-Clause
#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;
A simple collection of objects that can be described and transmitted in a portable way.
Definition: Bottle.h:64
void append(const Bottle &alt)
Append the content of the given bottle to the current list.
Definition: Bottle.cpp:380
bool read(ConnectionReader &reader) override
Set the bottle's value based on input from a network connection.
Definition: Bottle.cpp:240
void clear()
Empties the bottle of any objects it contains.
Definition: Bottle.cpp:121
bool write(ConnectionWriter &writer) const override
Output a representation of the bottle to a network connection.
Definition: Bottle.cpp:230
void addString(const char *str)
Places a string in the bottle, at the end of the list.
Definition: Bottle.cpp:170
std::string toString() const override
Gives a human-readable textual representation of the bottle.
Definition: Bottle.cpp:211
A mini-server for performing network communication in the background.
Definition: BufferedPort.h:60
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
void useCallback(TypedReaderCallback< T > &callback) override
Set an object whose onRead method will be called when data is available.
void setReplier(PortReader &reader) override
If a message is received that requires a reply, use this handler.
An interface for reading from a network connection.
virtual ConnectionWriter * getWriter()=0
Gets a way to reply to the message, if possible.
An interface for writing to a network connection.
Utilities for manipulating the YARP network, including initialization and shutdown.
Definition: Network.h:780
Interface implemented by all objects that can read themselves from the network, such as Bottle object...
Definition: PortReader.h:24
A callback for typed data from a port.
void delay(double seconds)
Wait for a certain number of seconds.
Definition: Time.cpp:111
An interface to the operating system, including Port based communication.
bool read(ImageOf< PixelRgb > &dest, const std::string &src, image_fileformat format=FORMAT_ANY)
Definition: ImageFile.cpp:915
The main, catch-all namespace for YARP.
Definition: dirs.h:16
int main(int argc, char *argv[])
Definition: yarpros.cpp:265