Maintaining Consistency with Timelines
Multi-surface environments (MSEs) are typically implemented as distributed systems, where different computers control different surfaces. For example, when combining a tabletop surface, a tablet and a smartphone into a single MSE, a network connection must be established between these different nodes, and data shared between these surfaces must be transmitted over this network. Time is required to transmit data over the network, possibly leading to poor synchronization of the views on different surfaces. This problem is particularly exacerbated in distributed, collaborative surface-based applications, where network latency can be high.
For a programmer developing a MSE, there are many complex issues that need to be dealt with, such as network latency, limited bandwidth and packet loss. As a result, the programmer may resort to using a simple consistency maintenance algorithm, which may have a negative impact on the usability of the MSE.
Janus (pronounced YAH-noos) is named after Janus the Roman god of gates, doors, doorways, windows, beginnings and endings. Janus also had the ability to see into both the past and the future. Similarly, users of the Janus toolkit are able to access shared state at any point in the past or future.
The heart of the Janus toolkit is comprised of two simple methods: Get and Set. The Set method allows the programmer to set the game state (or any object within the game) at any point in time either in the past, the present or the future. The Set method also forwards the state information to any clients who have subscribed to that object. Similarly, the Get method allows the programmer to access the state of an object in at game at any point in the past, present or future. Interpolation and extrapolation are automatically used to calculate intermediate values if an exact value does not exist at the time requested by the method. Janus is currently being used as component of several multiplayer games being developed in the EQUIS Lab.
Demos and Software Components
Documentation and open-source implementation of Janus: http://equis.cs.queensu.ca/wiki/index.php/Janus