Skip to content

🇬🇧 English | 🇺🇦 Українська

← До змісту

12. Консоль розробника

Розділ про S3CompatibleStorageDebug — окремий, необов'язковий модуль з консольними командами для тестувальників і програмістів: завантажити файл, подивитися вміст бакета чи останні запити, не пишучи для цього Blueprint-граф і не відкриваючи редактор.


Що це і чому окремий модуль

S3CompatibleStorageDebug має тип DeveloperTool — так само, як тестовий модуль з розділу 9. Тестування — і так само ніколи не потрапляє у Shipping-збірку. Відмінність у тому, для чого він призначений: тестовий модуль перевіряє сам плагін і працює лише в редакторі; цей — інструмент для гри, і працює й у зібраній Development-збірці, не лише в PIE.

Команди — це UFUNCTION(Exec) на розширенні CheatManager, тож підпорядковуються тим самим правилам, що й будь-яка інша чит-команда: у мультиплеєрі консоль може вимагати EnableCheats, залежно від того, як налаштований AllowCheats у вашому GameModeBase.

На відміну від тестового модуля, тут нічого не імітується. Кожна команда працює через Get Default S3 Client — той самий код і ту саму адресу, якими користується зібрана гра. S3Upload справді завантажує файл; S3Delete справді видаляє об'єкт.


Команди

Кожна команда працює з бакетом за замовчуванням (Get Default Bucket — той, що в Project Settings або в поточному профілі), тож вказувати його щоразу не треба.

Команда Аргументи Що робить
S3Stats Скільки передавань зараз виконується на клієнті за замовчуванням, і прогрес кожного
S3TestConnection Запитує один об'єкт із бакета за замовчуванням — найдешевший спосіб перевірити, що адреса й ключі робочі, без кнопки в Project Settings
S3ListObjects [Prefix] Перелічує до 50 об'єктів
S3Upload ObjectKey LocalFilePath Завантажує локальний файл у бакет
S3Download ObjectKey LocalFilePath Зчитує об'єкт у локальний файл
S3Delete ObjectKey Видаляє один об'єкт
S3TailRequests [Count=20] Останні завершені операції — див. нижче
S3ClearRequestLog Очищає журнал, який читає S3TailRequests
S3ResumeRecords Локальні записи про перервані передавання — в обидва боки
S3ClearResumeRecords Забуває всі записи вище (лише локально — див. попередження нижче)

Кожна команда асинхронна так само, як операція, яку вона викликає: результат приходить у консоль окремим рядком, коли завершиться, а не одразу.


S3TailRequests: журнал останніх операцій

Найкорисніша команда для звіту «щось зламалося, але я не знаю що». Вона показує кожну операцію, яка завершилася в цьому процесі — незалежно від того, який клієнт чи який Blueprint-граф її викликав, — новішу спершу:

> S3TailRequests 3
LogS3: Display: S3TailRequests: 3 of 47 logged (newest first).
LogS3: Display:   [14:32:07] UploadFile - OK (200, 0 retries, 1.42s)
LogS3: Display:   [14:31:52] GetObjectTags - FAILED (404, 0 retries, 0.31s) - NoSuchKey The specified key does not exist.
LogS3: Display:   [14:30:18] MultipartUpload - OK (200, 2 retries, 8.77s)

Журнал — кільцевий буфер на 200 записів і живе, поки живе процес: нова гра чи новий рівень його не очищають, S3ClearRequestLog — очищає.


S3ResumeRecords: що чекає на відновлення

Показує, що зараз лежить під Saved/S3/Uploads/ і Saved/S3/Downloads/ на цій машині — саме те, що підхопить наступна спроба того самого передавання, якщо ввімкнено Resume Interrupted Uploads / Resume Interrupted Downloads:

> S3ResumeRecords
LogS3: Display: S3ResumeRecords: 1 upload(s) under Saved/S3/Uploads/, 1 download(s) under Saved/S3/Downloads/.
LogS3: Display:   up   my-game-saves/big/level_pack.pak (upload 2~AbCdEf..., part size 5242880, source 41943040 bytes)
LogS3: Display:   down my-game-saves/big/intro.mp4 -> /Users/you/Movies/intro.mp4 (12582912 of 41943040 bytes, etag 9b2cf1...)

Рядок up описує завантаження в сховище, рядок downзчитування. Скільки саме зчитано, береться з розміру файлу .s3part, а не з запису: сам запис такого лічильника не містить, щоб йому не було з чим розійтися.

S3ClearResumeRecords чистить лише локальний запис. Частини, які вже долетіли до провайдера, це не чіпає — вони й далі оплачуються, доки не завершаться, не будуть скасовані чи не потраплять під правило життєвого циклу. Для цього є S3 Set Incomplete Upload Cleanup (розділ 4. Операції у Blueprint), а не ця команда. Файли .s3part теж лишаються на диску — без своїх записів вони просто перестають бути придатними для продовження.


← До змісту

Далі: 13. Профілі на практиці