Я создаю игру, в которой пользователи сражаются друг с другом на собственных устройствах в документе firestore, который является экземпляром игры. Проблема в том, что я хочу создать нерушимое решение, чтобы вовремя менять статус игры. Так что источником истины должен быть пожарный магазин.
Существует несколько статусов, указанных создателем игры (создано, считается), но после нескольких секунд подсчета мне нужно установить несколько статусов без действий пользователя. Поэтому следующие статусы - inProgress, scoreSummary.
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()
exports.gameStateChanger = functions.firestore
.document('rooms/{roomId}')
.onUpdate((change, context) => {
const roomId = context.params.roomId
const roomRef = admin.firestore().collection('rooms').doc(roomId)
const newValue = change.after.data()
console.log(newValue)
const oldValue = change.before.data()
if(newValue.game.status==='counting') {
setTimeout(() => {
console.log('timeout 5s')
roomRef.update({state: 'inProgress'})
setTimeout(() => {
roomRef.update({state: 'scoreSummary'})
}, 60000)
}, 5000)
}
})
Я пытался написать функцию firebase, но setTimeout в облачной функции - не лучшее решение из-за ограничений по времени выполнения. Я также вижу, что в обновлении от апреля есть расписание Firebase, но я хочу менять статусы через несколько секунд после того, как конкретный пользователь нажимает не каждые несколько секунд, и расписание также дорогое.
Может быть, кто-то имеет некоторый опыт работы с подобными решениями и скажет, в какую сторону идти?