🇬🇧 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. Профілі на практиці