-
Notifications
You must be signed in to change notification settings - Fork 24
/
JeuRouter.ts
125 lines (109 loc) · 3.52 KB
/
JeuRouter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import { Router, Request, Response, NextFunction } from 'express';
import { JeuDeDes } from '../core/JeuDeDes';
import { InvalidParameterError } from '../core/errors/InvalidParameterError';
export class JeuRouter {
private _router: Router;
private _controleurJeu: JeuDeDes; // contrôleur GRASP
get controleurJeu() {
return this._controleurJeu;
}
get router() {
return this._router;
}
/**
* Initialiser le router
*/
constructor() {
this._controleurJeu = new JeuDeDes(); // un routeur pointe vers au moins un contrôleur GRASP
this._router = Router();
this.init();
}
/**
* démarrer le jeu
*/
public demarrerJeu(req: Request, res: Response, next: NextFunction) {
const nom = req.body.nom;
try {
// POST ne garantit pas que tous les paramètres de l'opération système sont présents
if (!nom) {
throw new InvalidParameterError('Le paramètre nom est absent');
}
// Invoquer l'opération système (du DSS) dans le contrôleur GRASP
const joueur = this._controleurJeu.demarrerJeu(nom);
const joueurObj = JSON.parse(joueur);
req.flash('info', `Nouveau jeu pour ${nom}`);
res.status(201)
.send({
message: 'Success',
status: res.status,
joueur: joueurObj
});
} catch (error) {
console.error(error);
this._errorCode500(error, req, res);
}
}
/**
* jouer une fois aux dés
*/
public jouer(req: Request, res: Response, next: NextFunction) {
const nom = req.params.nom;
try {
// Invoquer l'opération système (du DSS) dans le contrôleur GRASP
const resultat = this._controleurJeu.jouer(nom);
const resultatObj = JSON.parse(resultat);
req.flash('info',
`Resultat pour ${nom}: ${resultatObj.v1} + ${resultatObj.v2} = ${resultatObj.somme}`);
res.status(200)
.send({
message: 'Success',
status: res.status,
resultat
});
} catch (error) {
console.error(error);
this._errorCode500(error, req, res);
}
}
private _errorCode500(error: any, req: any, res: Response<any, Record<string, any>>) {
// let code = 500;
// if (error.code) {
req.flash('error', error.message);
// code = error.code;
// }
res.status(error.code).json({ error: error.toString() });
}
/**
* terminer
*/
public terminerJeu(req: Request, res: Response, next: NextFunction) {
// obtenir nom de la requête
const nom = req.params.nom;
try {
// Invoquer l'opération système (du DSS) dans le contrôleur GRASP
const resultat = this._controleurJeu.terminerJeu(nom);
req.flash('info', `Jeu terminé pour ${nom}`);
res.status(200)
.send({
message: 'Success',
status: res.status,
resultat
});
} catch (error) {
console.error(error);
this._errorCode500(error, req, res);
}
}
/**
* Take each handler, and attach to one of the Express.Router's
* endpoints.
*/
init() {
this._router.post('/demarrerJeu', this.demarrerJeu.bind(this)); // pour .bind voir https://stackoverflow.com/a/15605064/1168342
this._router.get('/jouer/:nom', this.jouer.bind(this)); // pour .bind voir https://stackoverflow.com/a/15605064/1168342
this._router.get('/terminerJeu/:nom', this.terminerJeu.bind(this)); // pour .bind voir https://stackoverflow.com/a/15605064/1168342
}
}
// exporter its configured Express.Router
export const jeuRoutes = new JeuRouter();
jeuRoutes.init();