This tutorial helps you understand the behavior of yarp::os::Port versus yarp::os::BufferedPort.
To deepen your undrstanding of these classes you may checkout the online documentation and their APIs:
Follow these steps to build and properly install your module:
$ cd tutorial_yarp-producer-consumer
$ mkdir build; cd build
$ cmake ../
$ make
$ make installThe code will generate producer consumer pairs using conventional yarp::os::Port and yarp::os::BufferedPort.
The producer opens a port /producer, in which it sends numbered messages. The consumer opens a port /consumer, in which it receives data, and it prints the content at the console.
Terminal 1: Start the yarp server if not already running.
$ yarpserverTerminal 2: run the producer
$ tutorial_yarp-producer-port
yarp: Port /producer active at tcp://10.255.36.11:10097/
[1] written message
[2] written message
[3] written message
[4] written messageTerminal 3: Run the consumer
$./tutorial_yarp-consumer-port
yarp: Port /consumer active at tcp://10.255.36.11:10098/Terminal 4: Connect /producer to /consumer
$ yarp connect /producer /consumerThe consumer should show something like this:
yarp: Receiving input from /producer to /consumer using tcp
Received: 20 Hello from producer
Received: 21 Hello from producer
Received: 22 Hello from producer
Received: 23 Hello from producer
Received: 24 Hello from producerTerminal 5: Now run another instance of consumer, specify a different port name and add a delay.
$./tutorial_yarp-consumer-port --name /consumer2 --delay 5000Now you have a second consumer. To simulate a slow computer we added a delay (5s), which is the time the consumer waits before reading from the port.
Terminal 6: Connect the second consumer to the producer
yarp connect /producer /consumer2What happens to the producer? What happens when you disconnect one of the consumers?
Try connecting using a different protocol (i.e. udp):
yarp connect /producer /consumer2 udp
yarp connect /producer /consumer udpNow replicate the same experiment, this time using yarp::os::BufferedPort, i.e. tutorial_yarp-producer-buff and tutorial_yarp-consumer-buff.
Behavior of YARP ports is detailed in the following documents: