Storage Repository System

Technical Overview

Overview

DIRECT manages data on targeted devices using a system of storage container repositories. A single application can be more effectively managed by using separate repositories for individual components that may be updated, modified and/or removed independently of the data residing in other repositories. Example of repositories comprising an application are the game client binaries, large data files such as textures and maps, audio/video assets, DLC, etc.

Management (install/update/repair/etc.) of the repositories is handled by a set of task operations defined as JSON for consumption by the DIRECT Workflow Engine.

Repository Synchronization

DIRECT synchronizes repositories to the end-users’ machines with the "master" repository copy located on the CDN.  A local metafile is used to determine whether or not a repository requires an update by comparing the local release hash to the target release hash set by the publisher during deployment. When an update is available, the launcher client can be configured to perform any of the following types of updates:

  • Automatic – launcher syncs on session startup
  • User-prompted – user is notified of an update, clicks button to initiate
  • Upcoming – update can be downloaded but not applied to active filesystem until it is required to play the game

Regardless of the update type, the launcher can check for updates during a session on a configurable interval.

Example: Repositories in a Workflow and Filesystem

The sample JSON task below lists a repository for each of the following components comprising a single game application:

  • Game Launcher (for launcher self-updates)
  • Game client
  • Audio Files
  • Localized Files
  • Video Files
  • Game Data
"loadMacros": {
    "type": "macro",
    "keyValuePairs": {            
        "launcherRepository": "llamaLauncher.env.qa",
        "gameClientRepository": "llamaGameclient.env.qa",
        "audioRepository": "llamaAudio.env.qa",
        "localesRepository": "llamaLocales.env.qa",
        "videoRepository": "llamaVideo.env.qa",
        "dataRepository": "llamaData.env.qa",            
        "executableName-win": "Game Client/Game.exe", 
        "installDirectory": "{moduleDirectory}", 
        "repositoryAliasUrl": "https://d qnfw2fn6g2fc.cloudfront.net/aliases.json", 
        "repositoryCatalogUrl": "https://dqnfw2fn6g2fc.cloudfront.net/"
    }
}

​When synchronized to the end-user filesystem, this is how the files in each repository would look:

Note: The number of repositories and their files/folders is entirely customizable.