Robolink replaces client as the communications link between the base station tools and the robot. Robolink logs the entire stream of data received as well as forwarding it to client programs.

Usage

 robolink <ip address or suffix>

Like client, Robolink remains a separate program to any of the tools and acts as a gateway. Robolink has many advantages however:

    * Robolink accepts connections from any program that wishes to receive the dog data, rather than client making connections to specific local ports
    * The data that Robolink makes available to clients is in the same format as that it receives from the dog, so any single client tool could connect directly to the dog and bypass robolink.
    * Robolink doesn't care what the data is. Adding a new stream is as simple as adding extra constants to the data type enum and building a tool to interpret the data. 

Robolink connects to a robot on port 9000. Other programs connect to robolink on port 9000 to subscribe to the data stream. Robolink forwards the data to its clients and also logs the entire stream to file. Depending on the data that was captured, this log file can have a record of the entire game from a robot's point of view including world model, actuator positions, some images etc.

Client programs (e.g. offline SubVision) should be able to either read a robolink rlog file or connect a socket to robolink or both (the data formats are the same). Client programs simply need to parse the robolink header and extract data from chunks of the appropriate type, skipping over those for unwanted types. See trunk/base/colour/rlog2blf for a simple program that parses robolink log files.

See RobolinkProtocol for an overview of the data stream format.