Merge pull request 'MAPG-223 send error if member already guessed' (#19) from feature/MAPG-223-user-should-not-be-able-to-guess-after-round-is-over into develop
Reviewed-on: https://gitea.e5tv.hu/esoko/mapguesser/pulls/19
This commit is contained in:
commit
c5d2591371
@ -36,19 +36,20 @@ class MultiGame {
|
|||||||
|
|
||||||
createRoom(roomId) {
|
createRoom(roomId) {
|
||||||
this.rooms.set(roomId, { members: new Map(), rounds: [], currentRound: -1, updated: new Date() });
|
this.rooms.set(roomId, { members: new Map(), rounds: [], currentRound: -1, updated: new Date() });
|
||||||
|
|
||||||
|
return { ok: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
joinRoom(roomId, token, userName) {
|
joinRoom(roomId, token, userName) {
|
||||||
if (!this.rooms.has(roomId)) {
|
if (!this.rooms.has(roomId)) {
|
||||||
console.error('Room does not exist!')
|
return { error: 'room_not_found' };
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var room = this.rooms.get(roomId);
|
var room = this.rooms.get(roomId);
|
||||||
room.updated = new Date();
|
room.updated = new Date();
|
||||||
|
|
||||||
if (room.members.has(token)) {
|
if (room.members.has(token)) {
|
||||||
return;
|
return { error: 'member_already_joined' };
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = { userName: userName };
|
var data = { userName: userName };
|
||||||
@ -58,13 +59,13 @@ class MultiGame {
|
|||||||
});
|
});
|
||||||
|
|
||||||
room.members.set(token, { userName: userName, connection: null });
|
room.members.set(token, { userName: userName, connection: null });
|
||||||
|
|
||||||
|
return { ok: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
startGame(roomId, places) {
|
startGame(roomId, places) {
|
||||||
if (!this.rooms.has(roomId)) {
|
if (!this.rooms.has(roomId)) {
|
||||||
//TODO: send something back
|
return { error: 'room_not_found' };
|
||||||
console.log('Room does not exist!')
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var room = this.rooms.get(roomId);
|
var room = this.rooms.get(roomId);
|
||||||
@ -84,19 +85,23 @@ class MultiGame {
|
|||||||
room.rounds = rounds;
|
room.rounds = rounds;
|
||||||
|
|
||||||
this.nextRound(roomId, 0);
|
this.nextRound(roomId, 0);
|
||||||
|
|
||||||
|
return { ok: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
guess(roomId, token, guessPosition, distance, score) {
|
guess(roomId, token, guessPosition, distance, score) {
|
||||||
if (!this.rooms.has(roomId)) {
|
if (!this.rooms.has(roomId)) {
|
||||||
//TODO: send something back
|
return { error: 'room_not_found' };
|
||||||
console.log('Room does not exist!')
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var room = this.rooms.get(roomId);
|
var room = this.rooms.get(roomId);
|
||||||
room.updated = new Date();
|
room.updated = new Date();
|
||||||
|
|
||||||
var round = room.rounds[room.currentRound];
|
var round = room.rounds[room.currentRound];
|
||||||
|
if (round.results.has(token)) {
|
||||||
|
return { error: 'already_guessed' };
|
||||||
|
}
|
||||||
|
|
||||||
var member = room.members.get(token);
|
var member = room.members.get(token);
|
||||||
var allResults = this._collectResultsInRound(room, round);
|
var allResults = this._collectResultsInRound(room, round);
|
||||||
|
|
||||||
@ -106,14 +111,12 @@ class MultiGame {
|
|||||||
|
|
||||||
this._setNewTimeout(room, round);
|
this._setNewTimeout(room, round);
|
||||||
|
|
||||||
return allResults;
|
return { allResults: allResults };
|
||||||
}
|
}
|
||||||
|
|
||||||
nextRound(roomId, currentRound) {
|
nextRound(roomId, currentRound) {
|
||||||
if (!this.rooms.has(roomId)) {
|
if (!this.rooms.has(roomId)) {
|
||||||
//TODO: send something back
|
return { error: 'room_not_found' };
|
||||||
console.log('Room does not exist!')
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var room = this.rooms.get(roomId);
|
var room = this.rooms.get(roomId);
|
||||||
@ -137,6 +140,8 @@ class MultiGame {
|
|||||||
room.members.forEach(function (member) {
|
room.members.forEach(function (member) {
|
||||||
self._sendToMember(member, 'new_round', data);
|
self._sendToMember(member, 'new_round', data);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return { ok: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
_setNewTimeout(room, round) {
|
_setNewTimeout(room, round) {
|
||||||
@ -295,30 +300,30 @@ var tcpServer = net.createServer(function (socket) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var response = { data: null };
|
var response;
|
||||||
switch (data.func) {
|
switch (data.func) {
|
||||||
case 'create_room':
|
case 'create_room':
|
||||||
response.data = multiGame.createRoom(data.args.roomId);
|
response = multiGame.createRoom(data.args.roomId);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'join_room':
|
case 'join_room':
|
||||||
response.data = multiGame.joinRoom(data.args.roomId, data.args.token, data.args.userName);
|
response = multiGame.joinRoom(data.args.roomId, data.args.token, data.args.userName);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'start_game':
|
case 'start_game':
|
||||||
response.data = multiGame.startGame(data.args.roomId, data.args.places);
|
response = multiGame.startGame(data.args.roomId, data.args.places);
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
case 'guess':
|
case 'guess':
|
||||||
response.data = multiGame.guess(data.args.roomId, data.args.token, data.args.guessPosition, data.args.distance, data.args.score);
|
response = multiGame.guess(data.args.roomId, data.args.token, data.args.guessPosition, data.args.distance, data.args.score);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'next_round':
|
case 'next_round':
|
||||||
response.data = multiGame.nextRound(data.args.roomId, data.args.currentRound);
|
response = multiGame.nextRound(data.args.roomId, data.args.currentRound);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,7 @@ class GameFlowController
|
|||||||
$guessPosition = new Position((float) $this->request->post('lat'), (float) $this->request->post('lng'));
|
$guessPosition = new Position((float) $this->request->post('lat'), (float) $this->request->post('lng'));
|
||||||
$result = $this->evalueteGuess($last['position'], $guessPosition, $state['area']);
|
$result = $this->evalueteGuess($last['position'], $guessPosition, $state['area']);
|
||||||
|
|
||||||
$allResults = $this->multiConnector->sendMessage('guess', [
|
$responseFromMulti = $this->multiConnector->sendMessage('guess', [
|
||||||
'roomId' => $roomId,
|
'roomId' => $roomId,
|
||||||
'token' => $multiState['token'],
|
'token' => $multiState['token'],
|
||||||
'guessPosition' => $guessPosition->toArray(),
|
'guessPosition' => $guessPosition->toArray(),
|
||||||
@ -172,10 +172,14 @@ class GameFlowController
|
|||||||
'score' => $result['score']
|
'score' => $result['score']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if (isset($responseFromMulti['error'])) {
|
||||||
|
return new JsonContent(['error' => $responseFromMulti['error']]);
|
||||||
|
}
|
||||||
|
|
||||||
$response = [
|
$response = [
|
||||||
'position' => $last['position']->toArray(),
|
'position' => $last['position']->toArray(),
|
||||||
'result' => $result,
|
'result' => $result,
|
||||||
'allResults' => $allResults
|
'allResults' => $responseFromMulti['allResults']
|
||||||
];
|
];
|
||||||
|
|
||||||
return new JsonContent($response);
|
return new JsonContent($response);
|
||||||
|
@ -17,10 +17,6 @@ class MultiConnector
|
|||||||
}
|
}
|
||||||
fclose($connection);
|
fclose($connection);
|
||||||
|
|
||||||
$response = json_decode($response, true);
|
return json_decode($response, true);
|
||||||
|
|
||||||
if (isset($response['data'])) {
|
|
||||||
return $response['data'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user