У меня есть игровое приложение (Electron) и веб-приложение (тестирование на Android Chrome).Это передать сообщения через сервер веб-сокета.Я хочу скоординировать обратный отсчет между двумя процессами.Это не обязательно должно быть идеально, но я заметил, что если я работаю в среде с низкой задержкой, это нормально.Но чем больше их отставание в системе, тем больше кажется, что приложение Electron пытается запуститься гораздо раньше, чем веб-приложение.Я проверил всю свою математику, и она должна синхронизироваться, но это не так.
Сначала веб-приложение инициирует начало обратного отсчета, передавая время запуска игровому приложению
const timeToGameStart:number = peerConnection.timeToGameStart(); // time to game start = 3 x (the longest time it toke to pass a previous msg from game app to web app)
const currUnixTime:number = peerConnection.currUnixTime();
const startGameTime:number = currUnixTime + timeToGameStart;
const startGame:StartGame = <StartGame>{
msg_data_type:Msg_Data_Type.StartGame,
game_start_time:startGameTime
}
peerConnection.passMsg(startGame);
setTimeout(timer.start, timeToGameStart);
Ниже приведена часть кода приложения, которая отвечает на сообщение, переданное на сервер
const gameStartTime:number = (<StartGame> msgData).game_start_time;
const currUnixTime:number = ServerConnection.currUnixTime();
// if we are on time, wait till its right time else if we are late, start at the next inc 3,2,1
const countDownLength:number = 3;
if (currUnixTime <= gameStartTime) {
setTimeout(()=>startCountDown(countDownLength), currUnixTime - gameStartTime);
} else {
const timeWeAreLateBy:number = currUnixTime - gameStartTime;
const timeWeAreLateByInSec:number = Math.ceil(timeWeAreLateBy / 1000);
const shortCountDownLen:number = Math.max(countDownLength - timeWeAreLateByInSec, 0);
const timeToNextSec:number = Math.max((1000 * timeWeAreLateByInSec) - timeWeAreLateBy, 0);
setTimeout(()=>startCountDown(shortCountDownLen), timeToNextSec);
}