Android: Syn c CountDownTimer для нескольких клиентов, использующих базу данных Firebase Realtime - PullRequest
0 голосов
/ 04 апреля 2020

Я занимаюсь разработкой приложения с использованием Android & базы данных Firebase Realtime, где пользователи присоединяются к комнате, затем, когда хост нажимает кнопку запуска игры, все клиенты запускают основную игровую активность (через ValueEventListener на дочернем узле «Запущено» в номер). Основная игра имеет 60se c обратный отсчет, когда пользователи составляют предложение, а затем в конце 60secs все предложения собираются и отображаются.

Мне трудно собрать все предложения в конце срока. до таймеров 60se c, отключенных на разных клиентах. Мне нужен способ, чтобы все игры заканчивались в одно и то же время, чтобы процесс сбора был плавным и ничего не пропускалось.

Я знаю, что у Firebase есть и: /.info/serverTimeOffset, и ServerValue.TIMESTAMP, но я борюсь за как их использовать для синхронизации c таймеров.

Я пытался использовать System.currentTimeMillis() + serverTimeOffset для оценки времени сервера и заставить всех клиентов вести обратный отсчет до endTime - (System.currenTimeMillis() + serverTimeOffset), где endTime - время, записанное в база данных хоста, которую все клиенты читают, но таймеры все еще не работают.

Как лучше всего справиться с этой ситуацией?

1 Ответ

0 голосов
/ 04 апреля 2020

Я бы предложил:

Вместо запуска таймера, который обновляется каждую секунду на сервере, просто сохраняйте время запуска / остановки события и позволяйте клиентам управлять своими собственными таймерами.

Не выполняется -1 каждую секунду (поскольку setInterval и другие инструменты на стороне клиента не очень точны), но сравнивает текущую временную метку до конца и определяет разницу.

...