Add GameId, GameCode and Players

landing-page-layout
Laura Valera 2024-12-10 20:02:06 +01:00
parent 74eadacdb2
commit d9eafeb71a
7 changed files with 60 additions and 7 deletions

16
app/package-lock.json generated
View File

@ -16,7 +16,8 @@
"@nestjs/websockets": "^10.4.7", "@nestjs/websockets": "^10.4.7",
"interface": "file:../interface", "interface": "file:../interface",
"reflect-metadata": "^0.2.0", "reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1" "rxjs": "^7.8.1",
"uuid": "^11.0.3"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^10.0.0", "@nestjs/cli": "^10.0.0",
@ -8948,6 +8949,19 @@
"node": ">= 0.4.0" "node": ">= 0.4.0"
} }
}, },
"node_modules/uuid": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz",
"integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist/esm/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": { "node_modules/v8-compile-cache-lib": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",

View File

@ -26,7 +26,8 @@
"@nestjs/websockets": "^10.4.7", "@nestjs/websockets": "^10.4.7",
"interface": "file:../interface", "interface": "file:../interface",
"reflect-metadata": "^0.2.0", "reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1" "rxjs": "^7.8.1",
"uuid": "^11.0.3"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^10.0.0", "@nestjs/cli": "^10.0.0",

View File

@ -1,9 +1,10 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { AppService } from './app.service'; import { AppService } from './app.service';
import { PlayerService } from './players/player.service'; import { PlayerService } from './players/player.service';
import { GameService } from './games/game.service';
@Module({ @Module({
imports: [], imports: [],
providers: [AppService, PlayerService], providers: [AppService, PlayerService, GameService],
}) })
export class AppModule {} export class AppModule {}

View File

@ -7,6 +7,7 @@ import {
WebSocketGateway, WebSocketGateway,
} from '@nestjs/websockets'; } from '@nestjs/websockets';
import { PlayerService } from './players/player.service'; import { PlayerService } from './players/player.service';
import { GameService } from 'src/games/game.service';
import { Socket } from 'socket.io'; import { Socket } from 'socket.io';
import { ClientEvent, CreateLobbyEvent, JoinLobbyEvent } from 'interface'; import { ClientEvent, CreateLobbyEvent, JoinLobbyEvent } from 'interface';
@ -15,10 +16,12 @@ import { ClientEvent, CreateLobbyEvent, JoinLobbyEvent } from 'interface';
export class AppService implements OnGatewayConnection { export class AppService implements OnGatewayConnection {
private readonly logger = new Logger(AppService.name); private readonly logger = new Logger(AppService.name);
constructor(private readonly playerService: PlayerService) {} constructor(
private readonly playerService: PlayerService,
private readonly gameService: GameService,
) {}
handleConnection(client: Socket) { handleConnection(client: Socket) {
this.playerService.createPlayer(client.id); this.playerService.createPlayer(client.id);
this.logger.log(client.id);
} }
@SubscribeMessage(ClientEvent.CREATE_LOBBY) @SubscribeMessage(ClientEvent.CREATE_LOBBY)
@ -27,6 +30,7 @@ export class AppService implements OnGatewayConnection {
@MessageBody() event: CreateLobbyEvent, @MessageBody() event: CreateLobbyEvent,
) { ) {
this.playerService.addUserName(client.id, event.userName); this.playerService.addUserName(client.id, event.userName);
this.gameService.createLobby(this.playerService.getPlayer(client.id));
this.logger.log('Se ha creado un lobby'); this.logger.log('Se ha creado un lobby');
} }

View File

@ -0,0 +1,18 @@
import { Injectable, Logger } from '@nestjs/common';
import { Game } from './game';
import { v4 as uuidv4 } from 'uuid';
import { Player } from 'src/players/player';
@Injectable()
export class GameService {
private readonly logger = new Logger(GameService.name);
private readonly games: Map<string, Game> = new Map();
createLobby(player: Player) {
const gameId = uuidv4();
const gameCode = uuidv4().slice(-5).toUpperCase();
const game: Game = new Game(gameId, gameCode, player);
this.games.set(gameId, game);
this.logger.log([...this.games.entries()]);
}
}

12
app/src/games/game.ts Normal file
View File

@ -0,0 +1,12 @@
import { Player } from 'src/players/player';
export class Game {
gameId: string;
gameCode: string;
players: Set<Player>;
constructor(gameId: string, gameCode: string, player: Player) {
this.gameId = gameId;
this.gameCode = gameCode;
this.players = new Set([player]);
}
}

View File

@ -9,11 +9,14 @@ export class PlayerService {
createPlayer(socketId: string) { createPlayer(socketId: string) {
const player: Player = new Player(socketId); const player: Player = new Player(socketId);
this.players.set(socketId, player); this.players.set(socketId, player);
this.logger.log([...this.players.entries()]);
} }
addUserName(socketId: string, userName: string) { addUserName(socketId: string, userName: string) {
this.players.get(socketId).userName = userName; this.players.get(socketId).userName = userName;
this.logger.log([...this.players.entries()]); }
getPlayer(socketId: string) {
this.logger.log(this.players.get(socketId).userName);
return this.players.get(socketId);
} }
} }