XmdsProxy

Description
A XMDS proxy which supplies all XMDS functions for subscribed clients.

Launchpad
https://blueprints.launchpad.net/xibo/+spec/xmds-proxy

Description
Introduce a new mode to the Xibo server application called "XMDS Proxy". This mode will disable the admin interface entirely (on this host) and turn the server application into a Proxy server for XMDS. Display clients can then be pointed to this proxy server instead of the "master" or "central" Xibo server.

The proxy will cache all content requested by clients and serve the local copy if it is available. The proxy will need to periodically check that it still has up to date copies of cached content.

All XMDS functions will be replicated and any method calls will be passed through to the master server.

Once proxy mode is enabled it will be necessary to input:
 * XMDS URL of the "master" or "central" Xibo server
 * Server Key
 * Update period for checking content freshness (separate setting for media/layouts and Schedule Information)

Consideration needs to be given to a mechanism where by clients simultaneously requesting new uncached content can be downloaded once from the origin server and shared by the clients.

This might be achieved by a lock file. When a chunk is requested from the proxy that is not already downloaded, a lock file is created for it. Subsequent requests for the same chunk wait for the lock file to disappear before reading that chuck from the temporary file as it's being downloaded. Consideration needs to be given to how a client crashing or being terminated part way through a download would be handled such that the lock is not held forever.

All communication between the proxy and master server would be driven by clients connecting to the proxy.

Changes

 * A new SOAP server class that does the local serving and request for files from the central system
 * A new set of settings to support the required information

Extensions

 * Python clients seamlessly share content between them without bothering the proxy or central server.