Skip to content

Commit 0b20703

Browse files
committed
add a message when HighScores server is not reachable
1 parent a5960f5 commit 0b20703

File tree

6 files changed

+59
-9
lines changed

6 files changed

+59
-9
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
},
2626
"scripts": {
2727
"server": "node server/index.js",
28-
"start": "./start.sh",
28+
"start": "react-scripts start",
2929
"build": "react-scripts build",
3030
"test": "react-scripts test --env=jsdom",
3131
"eject": "react-scripts eject",

server/index.js

+12
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ app.get("/scores/:seed", (req, res) => {
6969
});
7070
});
7171

72+
app.post("/test", (req, res) => {
73+
try {
74+
if (req.body.everything === 42) {
75+
res.json({ success: true });
76+
} else {
77+
res.json({ success: false });
78+
}
79+
} catch (e) {
80+
res.json({ success: false });
81+
}
82+
});
83+
7284
app.post("/", (req, res) => {
7385
// a GameState is sent to server
7486
Promise.resolve(req.body)

src/Game/HighScores.js

+7
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,10 @@ export const send = (gameState: GameState): Promise<{ inserted: boolean }> =>
1111
headers: { "Content-Type": "application/json" },
1212
body: JSON.stringify({ gameState })
1313
}).then(res => res.json());
14+
15+
export const test = () =>
16+
fetch(env.highscoresAPI + "/test", {
17+
method: "POST",
18+
headers: { "Content-Type": "application/json" },
19+
body: JSON.stringify({ everything: 42 })
20+
}).then(res => res.json());

src/Game/index.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
}
2020

2121
.menu {
22-
font-size: 32px;
22+
font-size: 28px;
2323
}
2424
.menu input {
2525
border: 2px solid #d83;

src/Game/index.js

+34-6
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,15 @@ const modes = [
106106
{ value: "random", label: "Random", color: "#fff" }
107107
];
108108

109+
const highscoresTest = HighScores.test();
110+
109111
class GameComponent extends Component {
110112
state: {
111113
config: Config,
112114
loading: boolean,
113115
gameContextTitle: string,
114-
highscores: ?Array<{ level: number, username: string }>
116+
highscores: ?Array<{ level: number, username: string }>,
117+
highscoresServerAccessible: ?boolean
115118
} = {
116119
config: {
117120
quality: "high",
@@ -122,8 +125,22 @@ class GameComponent extends Component {
122125
},
123126
loading: false,
124127
gameContextTitle: "",
125-
highscores: null
128+
highscores: null,
129+
highscoresServerAccessible: null
126130
};
131+
componentWillMount() {
132+
Promise.race([
133+
highscoresTest,
134+
new Promise(success => setTimeout(success, 3000, "timeout"))
135+
])
136+
.then(r => {
137+
this.setState({ highscoresServerAccessible: r.success === true });
138+
})
139+
.catch(e => {
140+
this.setState({ highscoresServerAccessible: false });
141+
});
142+
}
143+
127144
gameState = null;
128145
getGameState = () => this.gameState;
129146
action = (name: string, ...args: *) => {
@@ -206,7 +223,13 @@ class GameComponent extends Component {
206223
if (process.env.NODE_ENV === "production") alert(errorMessage);
207224
};
208225
render() {
209-
const { config, highscores, gameContextTitle, loading } = this.state;
226+
const {
227+
config,
228+
highscores,
229+
gameContextTitle,
230+
highscoresServerAccessible,
231+
loading
232+
} = this.state;
210233
const { gameState } = this;
211234
const screen = typeof window.screen === "object" ? window.screen : null;
212235
const maxWidth = screen ? Math.min(screen.width, screen.height) : Infinity;
@@ -218,9 +241,11 @@ class GameComponent extends Component {
218241
body = (
219242
<div>
220243
Loading...
221-
<footer>
222-
if it never loads, try <a href="?quality=low">quality=low</a>
223-
</footer>
244+
{config.quality !== "low"
245+
? <footer>
246+
if it never loads, try <a href="?quality=low">quality=low</a>
247+
</footer>
248+
: null}
224249
</div>
225250
);
226251
} else if (gameState) {
@@ -284,6 +309,9 @@ class GameComponent extends Component {
284309
{v.message}
285310
</p>
286311
)}
312+
{highscoresServerAccessible === false
313+
? <p>WARNING the HighScores server is not currently reachable</p>
314+
: null}
287315
</div>
288316
</div>
289317
);

src/env.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
2-
highscoresAPI: "https://memocart.herokuapp.com"
2+
highscoresAPI:
3+
process.env.NODE_ENV === "development"
4+
? "http://localhost:9832"
5+
: "https://memocart.herokuapp.com"
36
};

0 commit comments

Comments
 (0)