VRPN from the library/server point of view
The VRPN library is compiled both on the client side and the server side. The library includes the entire communication class (vrpn_Connection) and the base classes for the various devices (trackers, buttons, sound devices, force devices, etc).
There are separate #include files for each of the device types in the library. Currently, these include vrpn_Connection.h and vrpn_Clock.h (not normally used directly by an application), vrpn_Tracker.h, vrpn_Button.h, vrpn_ForceDevice.h and vrpn_Sound.h. These files are used both on the client and server side, although both may derive specialized classes from the base device classes, or may even define their own device classes.
All device classes rely on the vrpn_Synchronized_Connection class to pass messages between the server and application. A vrpn_Device base class will know how to encode and decode its state or state updates in messages that are passed between a vrpn_Device_Remote class instance that the application creates and a vrpn_Device_Specific class that is written to handle the control of a specific device. For example, when an application communicates with a Polhemus 3Space tracker server, it creates a vrpn_Tracker_Remote instance and talks to a server that is using a vrpn_Tracker_3Space instance (both of which are derived from vrpn_Tracker).
Topics for those extending the library or writing servers