diff --git a/app/package-lock.json b/app/package-lock.json index 85c409c..cdd331f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -16,7 +16,8 @@ "@nestjs/websockets": "^10.4.7", "interface": "file:../interface", "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "uuid": "^11.0.3" }, "devDependencies": { "@nestjs/cli": "^10.0.0", @@ -8948,6 +8949,19 @@ "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": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/app/package.json b/app/package.json index d042d30..80c468a 100644 --- a/app/package.json +++ b/app/package.json @@ -26,7 +26,8 @@ "@nestjs/websockets": "^10.4.7", "interface": "file:../interface", "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "uuid": "^11.0.3" }, "devDependencies": { "@nestjs/cli": "^10.0.0", diff --git a/app/src/app.module.ts b/app/src/app.module.ts index 1a10921..7080014 100644 --- a/app/src/app.module.ts +++ b/app/src/app.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { AppService } from './app.service'; import { PlayerService } from './players/player.service'; +import { GameService } from './games/game.service'; @Module({ imports: [], - providers: [AppService, PlayerService], + providers: [AppService, PlayerService, GameService], }) export class AppModule {} diff --git a/app/src/app.service.ts b/app/src/app.service.ts index 8f3921b..6c489ba 100644 --- a/app/src/app.service.ts +++ b/app/src/app.service.ts @@ -7,6 +7,7 @@ import { WebSocketGateway, } from '@nestjs/websockets'; import { PlayerService } from './players/player.service'; +import { GameService } from 'src/games/game.service'; import { Socket } from 'socket.io'; import { ClientEvent, CreateLobbyEvent, JoinLobbyEvent } from 'interface'; @@ -15,10 +16,12 @@ import { ClientEvent, CreateLobbyEvent, JoinLobbyEvent } from 'interface'; export class AppService implements OnGatewayConnection { private readonly logger = new Logger(AppService.name); - constructor(private readonly playerService: PlayerService) {} + constructor( + private readonly playerService: PlayerService, + private readonly gameService: GameService, + ) {} handleConnection(client: Socket) { this.playerService.createPlayer(client.id); - this.logger.log(client.id); } @SubscribeMessage(ClientEvent.CREATE_LOBBY) @@ -27,6 +30,7 @@ export class AppService implements OnGatewayConnection { @MessageBody() event: CreateLobbyEvent, ) { this.playerService.addUserName(client.id, event.userName); + this.gameService.createLobby(this.playerService.getPlayer(client.id)); this.logger.log('Se ha creado un lobby'); } diff --git a/app/src/games/game.service.ts b/app/src/games/game.service.ts new file mode 100644 index 0000000..008d400 --- /dev/null +++ b/app/src/games/game.service.ts @@ -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 = 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()]); + } +} diff --git a/app/src/games/game.ts b/app/src/games/game.ts new file mode 100644 index 0000000..d005848 --- /dev/null +++ b/app/src/games/game.ts @@ -0,0 +1,12 @@ +import { Player } from 'src/players/player'; + +export class Game { + gameId: string; + gameCode: string; + players: Set; + constructor(gameId: string, gameCode: string, player: Player) { + this.gameId = gameId; + this.gameCode = gameCode; + this.players = new Set([player]); + } +} diff --git a/app/src/players/player.service.ts b/app/src/players/player.service.ts index b247a18..46cf383 100644 --- a/app/src/players/player.service.ts +++ b/app/src/players/player.service.ts @@ -9,11 +9,14 @@ export class PlayerService { createPlayer(socketId: string) { const player: Player = new Player(socketId); this.players.set(socketId, player); - this.logger.log([...this.players.entries()]); } addUserName(socketId: string, userName: string) { 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); } }