/// <summary> /// Entra en la cola para jugar en una categoria /// </summary> /// <param name="categoryName">Nombre de la categoría a la que se desea entrar en cola</param> /// <param name="nombreUsuario">Nombre de usuario que entra en cola</param> public void entrarEnCola(String categoryName, String nombreUsuario) { //Busca la categoria por su nombre según el nombre dado clsCategoriaYJugadoresBuscando categoria = partidas.Lista.Find(cat => cat.Nombre == categoryName); //clsCategoriaYJugadoresBuscando categoria = partidas.Lista.Find(cat => cat.Id == Utils.Categories[pepe]); //Si el nombre de la categoria pertenece a una categoria existente if (categoria != null) { //Saca de cola al cliente, por si estuviera en otra cola ya salirDeCola(); //Añade a la cola de esta categoria al cliente categoria.JugadoresBuscando.Add(new clsJugador(nombreUsuario, Context.ConnectionId, 0, 0)); //Si la cola de la categoria tiene más de un jugador, comienza una nueva partida para esta categoria if (categoria.NumJugadoresBuscando > 1) { comenzarPartida(categoria); } } //Manda de nuevo las categorias a los clientes List <clsCategoriaYNumJugadoresBuscando> categories = new List <clsCategoriaYNumJugadoresBuscando>(); foreach (clsCategoriaYJugadoresBuscando cat in partidas.Lista) { categories.Add(new clsCategoriaYNumJugadoresBuscando(cat)); } Clients.All.sendCategories(categories); }
/// <summary> /// Hace comenzar una nueva partida, cogiendo a los dos jugadores que estén primero en la cola /// </summary> /// <param name="categoria">Categoria en la que se jugará la partida</param> public void comenzarPartida(clsCategoriaYJugadoresBuscando categoria) { bool clientesDisponibles = false; //Coge a los dos jugadores que estén primero en la cola (Aunque esto no es una cola como tal xD, estaría bien cambiarlo) //clsJugador jugador1 = categoria.JugadoresBuscando[0]; //clsJugador jugador2 = categoria.JugadoresBuscando[1]; Queue <clsJugador> colaJugadoresBuscando = new Queue <clsJugador>(categoria.JugadoresBuscando); clsJugador jugador1 = colaJugadoresBuscando.Dequeue(); clsJugador jugador2 = colaJugadoresBuscando.Dequeue(); //Crea una lista vacia de preguntas (cuando alguno de los clientes entre en la partida entonces se solicitarán las preguntas, no sabía hacerlo de otra forma, haciendolo aqui tengo problemas con la asincronia) List <clsQuestion> questions = new List <clsQuestion>(); //Crea el objeto con la partida clsPartida partida = new clsPartida(clsPartida.IdIndex + categoria.Nombre, jugador1, jugador2, questions); //Añade la partida a la lista de partidas de la categoría dada categoria.Partidas.Add(partida); //Elimina de la cola a ambos jugadores que van a empezar a jugar String connectionID; int eliminadosDeCola = 0; //Por cada categoria o cuando ambos hayan sido eliminados de la cola for (int i = 0; i < partidas.Lista.Count && eliminadosDeCola < 2; i++) { //Por cada jugador en cola o cuando ambos hayan sido eliminados de la cola for (int j = 0; j < partidas.Lista[i].JugadoresBuscando.Count && eliminadosDeCola < 2; j++) { connectionID = partidas.Lista[i].JugadoresBuscando[j].ConnectionID; //Si es el jugador1 o jugador2, lo saca de cola if (connectionID == partida.Jugador1.ConnectionID || connectionID == partida.Jugador2.ConnectionID) { partidas.Lista[i].JugadoresBuscando.RemoveAt(j); eliminadosDeCola++; } } } //Indica a ambos jugadores que la partida comienza, mandando la informacion de esta (nombre de ambos jugadores y lista de preguntas) Clients.Client(jugador1.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas); Clients.Client(jugador2.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas); }