Skip to content

Commit 41b6a2b

Browse files
authored
Finish game when reconnected to internet (#176)
1 parent 550da07 commit 41b6a2b

File tree

3 files changed

+47
-24
lines changed

3 files changed

+47
-24
lines changed

src/pages/GamePage.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
} from "../game";
3838
import useFirebaseRef from "../hooks/useFirebaseRef";
3939
import useKeydown, { getModifierState } from "../hooks/useKeydown";
40-
import { formatANoun } from "../util";
40+
import { formatANoun, sleep } from "../util";
4141
import LoadingPage from "./LoadingPage";
4242
import NotFoundPage from "./NotFoundPage";
4343

@@ -93,6 +93,22 @@ function getNextGameId(gameId) {
9393
return `${id}-${num + 1}`;
9494
}
9595

96+
function ensureConnected() {
97+
return new Promise((resolve) => {
98+
const ref = firebase.database().ref(".info/connected");
99+
let wasConnected = true;
100+
const update = (snap) => {
101+
if (snap.val() === true) {
102+
ref.off("value", update);
103+
resolve(wasConnected);
104+
} else {
105+
wasConnected = false;
106+
}
107+
};
108+
ref.on("value", update);
109+
});
110+
}
111+
96112
function GamePage({ match }) {
97113
const user = useContext(UserContext);
98114
const { volume, notifications } = useContext(SettingsContext);
@@ -133,17 +149,16 @@ function GamePage({ match }) {
133149
if (finished.gameId === gameId) {
134150
// Attempt to finish the game a few times before giving up
135151
(async () => {
136-
const numRetries = 8;
152+
const numRetries = 10;
137153
for (let i = 0; i < numRetries; i++) {
138154
try {
139155
await finishGame({ gameId });
140156
break;
141157
} catch (error) {
142158
if (i === numRetries - 1) {
143159
setFinished({ gameId, error: error + "" });
144-
} else {
145-
const delay = 100 * Math.pow(2, i);
146-
await new Promise((resolve) => setTimeout(resolve, delay));
160+
} else if (await ensureConnected()) {
161+
await sleep(100 * Math.pow(1.5, i));
147162
}
148163
}
149164
}

src/util.js

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,26 @@ function isPunctuation(charCode) {
3636
);
3737
}
3838

39-
const fixedDataset = englishDataset.addPhrase((phrase) =>
40-
phrase
41-
.setMetadata({ originalWord: "brainrot" })
42-
.addPattern(pattern`skibidi`)
43-
.addPattern(pattern`|riz`)
44-
.addPattern(pattern`gyat`)
45-
.addPattern(pattern`sigma`)
46-
.addPattern(pattern`xook`)
47-
.addPattern(pattern`xoink`)
48-
.addPattern(pattern`xiooix`)
49-
.addPattern(pattern`admits`)
50-
.addPattern(pattern`orz`)
51-
.addPattern(pattern`otz`)
52-
.addPattern(pattern`ozr`)
53-
.addPattern(pattern`lebron`)
54-
);
39+
const fixedDataset = englishDataset
40+
.addPhrase((phrase) =>
41+
phrase.setMetadata({ originalWord: "ass" }).addWhitelistedTerm("45s")
42+
)
43+
.addPhrase((phrase) =>
44+
phrase
45+
.setMetadata({ originalWord: "brainrot" })
46+
.addPattern(pattern`skibidi`)
47+
.addPattern(pattern`|riz`)
48+
.addPattern(pattern`gyat`)
49+
.addPattern(pattern`sigma`)
50+
.addPattern(pattern`xook`)
51+
.addPattern(pattern`xoink`)
52+
.addPattern(pattern`xiooix`)
53+
.addPattern(pattern`admits`)
54+
.addPattern(pattern`orz`)
55+
.addPattern(pattern`otz`)
56+
.addPattern(pattern`ozr`)
57+
.addPattern(pattern`lebron`)
58+
);
5559
// Work-around for:
5660
// https://github.com/jo3-l/obscenity/issues/100
5761
// https://github.com/jo3-l/obscenity/pull/101
@@ -165,11 +169,10 @@ export function formatDateTime(timestamp) {
165169
return d.toLocaleString(undefined, opts);
166170
}
167171

168-
const trimRegex =
169-
/^[\p{White_Space}\p{Default_Ignorable_Code_Point}]+|[\p{White_Space}\p{Default_Ignorable_Code_Point}]+$/gu;
172+
const trimRegex = /\p{Default_Ignorable_Code_Point}+/gu;
170173

171174
export function unicodeTrim(str) {
172-
return str.replace(trimRegex, "");
175+
return str.replace(trimRegex, "").trim();
173176
}
174177

175178
export function parseDuration(spec) {
@@ -183,3 +186,7 @@ export function parseDuration(spec) {
183186
.map((v, i) => (m[i + 1] ? parseFloat(m[i + 1]) * v : 0))
184187
.reduce((a, c) => a + c);
185188
}
189+
190+
export function sleep(ms) {
191+
return new Promise((resolve) => setTimeout(resolve, ms));
192+
}

src/util.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe("bad words filter", () => {
1414
expect(badWords.hasMatch("fick")).toBe(false);
1515
expect(badWords.hasMatch("fickle")).toBe(false);
1616
expect(badWords.hasMatch("a\u200dsshole")).toBe(true);
17+
expect(badWords.hasMatch("45s")).toBe(false);
1718
});
1819
});
1920

0 commit comments

Comments
 (0)