vimp-engine 0.37.0 → 0.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vimp-engine",
3
- "version": "0.37.0",
3
+ "version": "0.37.1",
4
4
  "description": "VIMP — движок-приложение (мастер, P2P-транспорт, Worker-хост, мета, MVC-каркас клиента)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -172,8 +172,22 @@ export default class GuestSession {
172
172
  let reconnectAttempt = 0;
173
173
 
174
174
  publisher.on('close', () => {
175
- const { baseDelay, maxDelay } = this._config.reconnect;
176
- const delay = Math.min(maxDelay, baseDelay * 2 ** reconnectAttempt);
175
+ const {
176
+ baseDelay,
177
+ maxDelay,
178
+ hostFirstDelay = 0,
179
+ } = this._config.reconnect;
180
+ // хост: мастер держит комнату hostDisconnectGraceMs — первая попытка
181
+ // сразу, дальше тот же бэкофф, сдвинутый на одну ступень
182
+ const isHost = Boolean(this._hostRole.controller);
183
+ const delay =
184
+ isHost && reconnectAttempt === 0
185
+ ? hostFirstDelay
186
+ : Math.min(
187
+ maxDelay,
188
+ baseDelay *
189
+ 2 ** (isHost ? reconnectAttempt - 1 : reconnectAttempt),
190
+ );
177
191
 
178
192
  reconnectAttempt += 1;
179
193
  this._timers.setTimeout(() => this._signaling.connect(), delay);
@@ -172,8 +172,12 @@ export default {
172
172
  defaultLeaderboardPeriod: 'all',
173
173
 
174
174
  // переподключение сигнального WS хоста (комната без него выпадает из
175
- // выдачи мастера): экспоненциальный бэкофф от baseDelay до maxDelay (мс)
175
+ // выдачи мастера): экспоненциальный бэкофф от baseDelay до maxDelay (мс).
176
+ // Вкладка-хост переподключается первой попыткой сразу (hostFirstDelay):
177
+ // мастер держит её комнату master:room:hostDisconnectGraceMs, и вторая
178
+ // попытка (через baseDelay) тоже должна уложиться в выдержку
176
179
  reconnect: {
180
+ hostFirstDelay: 0,
177
181
  baseDelay: 1000,
178
182
  maxDelay: 30000,
179
183
  },
@@ -87,9 +87,13 @@ export default {
87
87
  room: {
88
88
  // отсоединённый участник ещё считается в комнате (реконнект сигналинга)
89
89
  memberGraceMs: 15000,
90
- // обрыв WS хоста запускает миграцию сразу (reclaim_host до регистрации
91
- // преемника её отменяет, этап 7.0); если повысить некого — комната
92
- // ждёт reclaim_host столько, потом уборка мигрирует или закрывает её
90
+ // обрыв WS хоста запускает миграцию не сразу, а через столько, если хост
91
+ // не вернулся reclaim_host'ом и ни один гость не сообщил host_unreachable
92
+ // (host_leaving мигрирует сразу); reclaim_host после начала миграции, до
93
+ // регистрации преемника, её отменяет (этап 7.0)
94
+ hostDisconnectGraceMs: 2000,
95
+ // повышать некого — комната ждёт reclaim_host столько, потом уборка
96
+ // мигрирует или закрывает её
93
97
  hostReclaimGraceMs: 10000,
94
98
  // потолок строки карточки комнаты в лобби (gameConfig.lobbyInfo игры)
95
99
  maxInfoLength: 48,