Я создаю приложение Android, в котором игроки подключены к базе данных Firebase Realtime (от 2 до 4 игроков в комнате). Если я резюмирую, что должен делать мой код: игроки могут нажимать кнопку каждый по очереди. Когда игрок щелкает и наступает его очередь, приложение записывает (с runTransaction
) на сервере тип int (например, «clicked: 2» означает, что игрок 2 только что щелкнул). Когда "нажатая" клавиша видна на сервере (с addValueEventListener
), все игроки, подключенные к этой комнате, выполняют (одновременно, и выполнение выполняется на стороне клиента) 3 секунды CountDownTimer
. Во время этого обратного отсчета все игроки (без исключения) могут нажимать на свои кнопки, и в этом случае учитывается только тот, кто щелкнет первым (потому что runTransaction
), и будет записан на сервере. Таким образом, каждый увидит на своем устройстве, что игрок щелкнул свою кнопку во время обратного отсчета, а затем мы начнем все сначала (то есть следующий игрок должен начать обратный отсчет et c). Теоретически это нормально, но после тестирования (со старым и новым, а значит и более быстрым, смартфоном) возникает проблема:
Некоторые устройства работают быстрее других, и в большинстве случаев обратный отсчет не начинается одновременно для разных игроков. Так что я подумал, например (но возможны и другие, не стесняйтесь!), Написать на сервере, в какое время (в мс) игрок щелкнул, и взять это время + 500 мс (или другое) чтобы начать обратный отсчет. Но для этого вам понадобится время Firebase (TimeStamp
я думаю), и я не знаю, как ... (желательно только в Java, я не люблю трогать json слишком много)