Skip to content

Streaming и Assets

Сервер отдает client-accessible resource files через HTTP port и отправляет resource manifest клиенту через game connection.

Manifest

/resources/manifest.json строится из enabled resources (CResourceManager::BuildManifestJson). Manifest содержит:

  • schema (текущая версия — 1)
  • totalFiles и totalBytes
  • files[] — по одному entry на каждый client file
  • resources[] — по одному entry на каждый resource, в порядке загрузки (порядок resources из server.toml, иначе порядок discovery)

Каждый entry в files[]: resource, path, url, size, флаг stream, sha256 (по plaintext) и enc — только для encrypted-at-rest файлов.

Каждый entry в resources[]: name, type, clientType, assetsBase, streamBase, clientMain (если задан), exports, dependencies, clientFiles, dataFiles и parsed config. Server entry (main) в manifest не попадает — он остается server-side.

Тот же manifest отправляется клиенту в игре по encrypted game connection; launcher префетчит /resources/manifest.json до подключения GTA.

Client files

Клиенту доступны только те файлы resource, что попали в manifest files[]:

  • configured client-main
  • пути, подходящие под client-files
  • файлы из stream.toml (files globs и [meta] data files)

client-files поддерживает exact paths, ** (все файлы), prefix/* (один уровень) и prefix/** (рекурсивно).

Asset URL routing

Любой advertised client file доступен по:

text
/assets/<resource>/<path>

Сервер канонизирует этот URL в /resources/files/<resource>/<path> и матчит его против allowlist из manifest. Path traversal segments отклоняются до чтения файла. type = "asset-pack" — это тип resource, а НЕ routing gate.

Stream URL routing

Любой advertised file, чей resource-relative путь начинается со stream/, получает URL — независимо от type resource:

text
/stream/<resource>/<path>

Файлы под stream/ можно объявить либо через client-files, либо через stream.toml. stream.toml задает:

  • files — globs файлов под stream/
  • [meta] — data-file tags (ключ = путь, значение = GTA data-file type, например HANDLING_FILE)

Автоматического default stream/** нет: если stream.toml не перечисляет файлы (и client-files их не покрывает), stream-файлы не публикуются.

Client helpers

javascript
const ui = varion.assetUrl('inventory-ui', 'index.html');
const ydr = varion.streamUrl('vehicle-pack', 'car.yft');

varion.HttpClient и varion.Http разрешают HTTP calls только к server manifest host или asset-pack host. Runtime отклоняет invalid protocols, game port и hosts вне manifest/asset base.

Source backing

Страница основана на server/src/CResourceManager.cpp, src/network/CNetworkManager.cpp, sdk/client-js-runtime/injected/events-bootstrap.js и sdk/client-js-runtime/injected/services-bootstrap.js.

Varion Multiplayer Platform