Streaming и Assets
Сервер отдает client-accessible resource files через HTTP port и отправляет resource manifest клиенту через game connection.
Manifest
/resources/manifest.json строится из enabled resources (CResourceManager::BuildManifestJson). Manifest содержит:
schema(текущая версия —1)totalFilesиtotalBytesfiles[]— по одному entry на каждый client fileresources[]— по одному 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(filesglobs и[meta]data files)
client-files поддерживает exact paths, ** (все файлы), prefix/* (один уровень) и prefix/** (рекурсивно).
Asset URL routing
Любой advertised client file доступен по:
/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:
/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
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.