The X-Plane Remote Access (XPLRA) plugin allows external applications (running on the same computer as the simulator currently) to access its internals:
- Get and set the values of datarefs either individually or in batch. Batches can also be pre-registered in case the same set of datarefs is to be queried or modified several times. This avoids having to send and resolve the dataref names every time.
- Show a message in a window for the pilot for a specified amount of time.
- Register and then monitor hotkeys.
The plugin is currently available for 64-bit Linux and Windows. It has C/C++ and Python client libraries, but the protocol is documented, so you can write your own client implementation even from scratch.
More information is available on the Trac site of the projects making up the plugin.
Why another such plugin?
The idea of the plugin arose when designing a flight logging application for the Malév Virtual Airlines. On Windows and with FS9 and FSX, the application uses FSUIPC. So something similar was looked for, but none found that would fulfill the requirements completely. Therefore even if one of the existing solutions were chosen, a simple plugin would have had to be written anyway that performs the missing pieces. Instead, it was decided to implement a powerful and generic plugin, so that other applications could possibly use it.
In the following I list the two plugins that were considered, and why they were rejected:
– XPUIPC: this provides a conceptually very similar interface to FSUIPC, so it looked a natural candidate. However, it is Windows-only, while the logger should preferably run on Linux (and possibly even on Mac) as well.
– Simulator Communication System (SCS): this is rather comprehensive and multi-platform, but not all necessary data can be accessed through it. As it is based on a standard (which is generally a good thing), any extensions look quite lengthy to achieve. And it is also missing some necessary functionality, such as displaying messages to the pilot and handling hotkeys.
Based on the above, it was decided to implement a new plugin, and also incorporate the other required features.