This commit is contained in:
Chompstation Bot
2021-06-18 04:23:03 +00:00
committed by Darlantan
parent 5f76f2e855
commit 331e5230d6
332 changed files with 23458 additions and 9666 deletions

View File

@@ -0,0 +1,48 @@
/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
*/
import { pingSuccess } from '../ping/actions';
import { connectionLost, connectionRestored, roundRestarted } from './actions';
import { selectGame } from './selectors';
import { CONNECTION_LOST_AFTER } from './constants';
const withTimestamp = action => ({
...action,
meta: {
...action.meta,
now: Date.now(),
},
});
export const gameMiddleware = store => {
let lastPingedAt;
setInterval(() => {
const state = store.getState();
if (!state) {
return;
}
const game = selectGame(state);
const pingsAreFailing = lastPingedAt
&& Date.now() >= lastPingedAt + CONNECTION_LOST_AFTER;
if (!game.connectionLostAt && pingsAreFailing) {
store.dispatch(withTimestamp(connectionLost()));
}
if (game.connectionLostAt && !pingsAreFailing) {
store.dispatch(withTimestamp(connectionRestored()));
}
}, 1000);
return next => action => {
const { type, payload, meta } = action;
if (type === pingSuccess.type) {
lastPingedAt = meta.now;
return next(action);
}
if (type === roundRestarted.type) {
return next(withTimestamp(action));
}
return next(action);
};
};