diff --git a/src/GestorJuegos.kt b/src/GestorJuegos.kt index 6184b71..6973923 100644 --- a/src/GestorJuegos.kt +++ b/src/GestorJuegos.kt @@ -42,7 +42,7 @@ object GestorJuegos { } private suspend fun broadcast(juego: Juego, mensaje: String) { - juego.conexiones.forEach { socket -> + juego.conexiones.forEach { (_, socket) -> socket.send(Frame.Text(mensaje)) } } @@ -61,9 +61,18 @@ object GestorJuegos { str += "{\"idUsuario\": \"$idUsuarioAct\", \"nombreUsuario\": \"$nombreUsuarioAct\"}" } str += "]" - juego.agregarConexion(ws) + juego.agregarConexion(idUsuario, ws) juego.agregarUsuario(idUsuario) ws.send(Frame.Text("{\"operacion\": \"conexion_exitosa\", \"jugadores\": $str}")) } + suspend fun iniciarJuego(idJuego: String, ws: WebSocketSession) { + val juego = juegos[idJuego] + if (juego != null) { + juego.iniciarJuego(ws) + } else { + ws.send(Frame.Text("{\"operacion\": \"error\", \"razon\": \"Juego invalido\"}")) + } + } + } diff --git a/src/Juego.kt b/src/Juego.kt index 53c730c..a24d00f 100644 --- a/src/Juego.kt +++ b/src/Juego.kt @@ -5,15 +5,21 @@ import io.ktor.http.cio.websocket.* class Juego(val usuarios: ArrayList>) { private val cartas: Array = GestorJuegos.generarCartas() - val conexiones: ArrayList = arrayListOf() + val conexiones: HashMap = HashMap() private val manos: HashMap = HashMap() private val dora: ArrayList = arrayListOf() var estadoJuego = EstadoJuego.Espera var posCartaActual = 0 + var doraDescubiertos = 1 - suspend fun iniciarJuego() { + suspend fun iniciarJuego(ws: WebSocketSession) { if (estadoJuego != EstadoJuego.Espera) return + if (conexiones.size < 4) { + ws.send(Frame.Text("{\"operacion\": \"error\", \"razon\": \"Usuarios insuficientes\"}")) + return + } + estadoJuego = EstadoJuego.Iniciado for (i in posCartaActual until (posCartaActual + 10)) { dora.add(cartas[i]) @@ -21,25 +27,26 @@ class Juego(val usuarios: ArrayList>) { posCartaActual += 10 for ((idUsuario, _) in usuarios) { - val cartas = ArrayList() + val cartasL = arrayListOf() for (i in posCartaActual until (posCartaActual + 10)) { - cartas.add(cartas[i]) + cartasL.add(cartas[i]) } posCartaActual += 10 - val mano = Mano(cartas) + val mano = Mano(cartasL) manos[idUsuario] = mano } - conexiones.forEach { socket -> + conexiones.forEach { (_, socket) -> socket.send(Frame.Text("{\"operacion\": \"juego_iniciado\"}")) } conexiones.clear() + println("Parametros del juego creados!") } - fun agregarConexion(conexion: WebSocketSession) { - conexiones.add(conexion) + fun agregarConexion(idUsuario: String, conexion: WebSocketSession) { + conexiones[idUsuario] = conexion } fun agregarUsuario(idUsuario: String) { diff --git a/src/Mano.kt b/src/Mano.kt index c8821ca..3fc4349 100644 --- a/src/Mano.kt +++ b/src/Mano.kt @@ -1,3 +1,9 @@ package dev.araozu -class Mano(cartas: ArrayList) +class Mano(cartas: ArrayList) { + + val allIn: Boolean = false + val cartaSig: Int? = null + val cartasReveladas: ArrayList> = ArrayList() + +} diff --git a/src/WSJuego.kt b/src/WSJuego.kt index da03a62..e14d7f6 100644 --- a/src/WSJuego.kt +++ b/src/WSJuego.kt @@ -22,6 +22,10 @@ fun Routing.wsjuego() { val datos2 = gson.fromJson(datos.datos, ConexionNueva::class.java) GestorJuegos.conectarASala(datos2.idJuego, datos2.idUsuario, this) } + "iniciar" -> { + val datos2 = gson.fromJson(datos.datos, ConexionNueva::class.java) + GestorJuegos.iniciarJuego(datos2.idJuego, this) + } } } }