private void AtenderServidor() { while (true) { //Recibimos mensaje del servidor byte[] msg2 = new byte[80]; server.Receive(msg2); //Limpio el mensaje string respuesta = Encoding.ASCII.GetString(msg2).Split('\0')[0]; string[] trozos = respuesta.Split('/'); int codigo = Convert.ToInt32(trozos[0]); string mensaje; int nform; int ID; switch (codigo) { case 1: //Registro int codigo2 = Convert.ToInt32(trozos[1]); if (codigo2 == 0) { MessageBox.Show(UsuarioBox.Text + " se ha registrado correctamente"); } else if (codigo2 == -1) { MessageBox.Show(UsuarioBox.Text + " ya está en uso"); } else if (codigo2 == -2) { MessageBox.Show("El nombre de usuario es muy largo"); } break; case 2: //Login codigo2 = Convert.ToInt32(trozos[1]); if (codigo2 == -3) { MessageBox.Show("Datos de acceso inválidos"); } else { MessageBox.Show("Datos de acceso correctos"); if (codigo2 == 1) { MessageBox.Show("Has iniciado sesión como " + UsuarioBox.Text); conectados.Add(UsuarioBox.Text); usuario = UsuarioBox.Text; DelegadoParaActualizarSesion delegado2 = new DelegadoParaActualizarSesion(ActualizarSesion); SesionLbl.Invoke(delegado2); } else if (codigo2 == 2) { MessageBox.Show("Ya habías iniciado sesión como " + UsuarioBox.Text + " en este cliente"); } else if (codigo2 == 3) { MessageBox.Show("Ya habías iniciado sesión como " + UsuarioBox.Text + " en otro cliente"); } else if (codigo2 == -1) { MessageBox.Show("No se ha podido iniciar sesión, la lista de conectados está llena"); } else if (codigo2 == -2) { MessageBox.Show("En este cliente ya se había iniciado sesión con otro usuario"); } } break; case 14: //Salir codigo2 = Convert.ToInt32(trozos[1]); if (codigo2 == -1) { MessageBox.Show("No se había iniciado sesión"); } else if (codigo2 == 1) { MessageBox.Show(usuario + " , has cerrado sesión"); conectados.Remove(usuario); usuario = ""; DelegadoParaActualizarSesion delegado2 = new DelegadoParaActualizarSesion(ActualizarSesion); SesionLbl.Invoke(delegado2); } break; case 15: //EliminarCuenta codigo2 = Convert.ToInt32(trozos[1]); if (codigo2 == -1) { MessageBox.Show("No se había iniciado sesión"); } else if (codigo2 == -2) { MessageBox.Show("No se ha podido eliminado el usuario"); } else if (codigo2 == -3) { MessageBox.Show("Se ha eliminado el usuario, " + usuario + ", pero no se ha podido cerrar sesión"); } else if (codigo2 == 1) { MessageBox.Show(usuario + ", has cerrado sesión y se ha eliminado el usuario"); conectados.Remove(usuario); usuario = ""; DelegadoParaActualizarSesion delegado2 = new DelegadoParaActualizarSesion(ActualizarSesion); SesionLbl.Invoke(delegado2); } break; case 3: //Contraseña del usuario mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { MessageBox.Show("Tu contraseña es: " + mensaje); } else { MessageBox.Show("No se ha encontrado el usuario"); } break; case 4: //Jugadores de la partida por ID mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { string jugadores = "Los jugadores en esta partida son: "; for (int i = 1; i < (trozos.Length - 1); i++) { mensaje = trozos[i].Split('\0')[0]; jugadores = jugadores + mensaje + ", "; } jugadores = jugadores.Remove(jugadores.Length - 2); MessageBox.Show(jugadores); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 16: //Jugadores de la partida contra los que he jugado mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { string jugadores = "Has jugado contra: "; for (int i = 1; i < (trozos.Length - 1); i++) { mensaje = trozos[i].Split('\0')[0]; jugadores = jugadores + mensaje + ", "; } jugadores = jugadores.Remove(jugadores.Length - 2); MessageBox.Show(jugadores); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 5: //Ganador de la partida mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { MessageBox.Show("El ganador de la partida es: " + mensaje); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 6: //Duración de la partida int tiempo = Convert.ToInt32(trozos[1]); if (trozos[1] != "fail") { MessageBox.Show("La duración de la partida es de: " + tiempo + " minutos"); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 18: //Partidas en un intervalo de fechas mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { string prtds = "En ese intervalo hubo: "; for (int i = 1; i < (trozos.Length - 1); i = i + 2) { codigo2 = Convert.ToInt32(trozos[i]); mensaje = trozos[i + 1].Split('\0')[0]; prtds = prtds + "Partida " + codigo2 + " el " + mensaje + ", "; } prtds = prtds.Remove(prtds.Length - 2); MessageBox.Show(prtds); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 7: //Ganador más rápido mensaje = trozos[1].Split('\0')[0]; if (trozos[1] != "fail") { MessageBox.Show("El ganador más rápdio es: " + mensaje); } else { MessageBox.Show("No se han obtenido datos en la consulta"); } break; case 17: //Ganador con determinado usuario y adversario en partida mensaje = trozos[1].Split('\0')[0]; if (mensaje != "fail") { string ganadores = "Los ganadores son los siguientes: "; for (int i = 1; i < (trozos.Length - 1); i = i + 2) { codigo2 = Convert.ToInt32(trozos[i]); mensaje = trozos[i + 1].Split('\0')[0]; ganadores = ganadores + mensaje + " ganó en Partida " + codigo2 + ", "; } ganadores = ganadores.Remove(ganadores.Length - 2); MessageBox.Show(ganadores); } else { MessageBox.Show("No se ha encontrado la partida"); } break; case 8: //Notificación de Lista de Conectados //Haz tu lo que no me dejas hacer a mi DelegadoParaListaConectados delegado = new DelegadoParaListaConectados(ListaConectados); ConectadosGrid.Invoke(delegado, new object[] { respuesta }); break; case 9: //Notificación de Invitar mensaje = trozos[1].Split('\0')[0]; if (mensaje == "-4") { MessageBox.Show("No se ha seleccionado ningún jugador"); } else if (mensaje == "-1") { MessageBox.Show("No se ha encontrado a un invitado"); } else if (mensaje == "-2") { MessageBox.Show("No hay jugadores suficientes"); } else if (mensaje == "-3") { MessageBox.Show("No se permiten más partidas"); } else { ID = Convert.ToInt32(trozos[2]); string pregunta = mensaje + " te ha invitado a la partida " + ID; DialogResult dialogo = MessageBox.Show(pregunta, "Invitación", MessageBoxButtons.YesNo); if (dialogo == DialogResult.Yes) { mensaje = "10/" + ID + "/YES"; } else { mensaje = "10/" + ID + "/NO"; } // Enviamos al servidor la consulta byte[] msg = System.Text.Encoding.ASCII.GetBytes(mensaje); server.Send(msg); } break; case 10: //Notificación de Respuesta Invitación mensaje = trozos[2].Split('\0')[0]; if (mensaje == "TRUE") { MessageBox.Show("La partida iniciará en breves"); ID = Convert.ToInt32(trozos[1]); string jugadores = trozos[3].Split('\0')[0]; //Ahora se tendría que iniciar el Form2 ThreadStart ts = delegate { PonerEnMarchaFormulario(ID, jugadores); }; Thread T = new Thread(ts); T.Start(); } else if (mensaje == "FALSE") { MessageBox.Show("No se cumplen los requisitos para iniciar un partida"); } break; case 11: //Notificación de Jugada nform = Convert.ToInt32(trozos[1]); ID = Convert.ToInt32(trozos[2]); mensaje = trozos[3].Split('\0')[0]; //MessageBox.Show(mensaje); formularios[partidas[ID]].TomaRespuesta2(mensaje); break; case 12: //Notificación de Mensaje nform = Convert.ToInt32(trozos[1]); ID = Convert.ToInt32(trozos[2]); mensaje = trozos[3].Split('\0')[0]; formularios[partidas[ID]].TomaRespuesta3(mensaje); //MessageBox.Show(mensaje); break; case 13: //Notificación de Abandono Partida nform = Convert.ToInt32(trozos[1]); ID = Convert.ToInt32(trozos[2]); mensaje = trozos[3].Split('\0')[0]; formularios[partidas[ID]].TomaRespuesta4(mensaje); //MessageBox.Show(mensaje); break; } } }
private void AtenderServidor() { while (true) { //Recibimos mensaje del servidor byte[] msg2 = new byte[400]; server.Receive(msg2); string[] trozos = Encoding.ASCII.GetString(msg2).Split('/'); //MessageBox.Show(trozos[0] + "/" + trozos[1] + "/" + trozos[2]); int codigo = Convert.ToInt32(trozos[0]); //Tipo de mensaje int idPartida = Convert.ToInt32(trozos[1]); //Obtenemos el id de la partida //Limpiamos el mensaje string mensaje = trozos[2].Split('\0')[0]; switch (codigo) { case 1: //Registrar if (mensaje == "0") { nombre = Usuario.Text; DelegadoParaEscribir delegado = new DelegadoParaEscribir(DesbloquearFunciones); this.Invoke(delegado, new object[] { nombre }); } else { DelegadoParaEscribir delegado = new DelegadoParaEscribir(EscrivirInformacion); if (mensaje == "1") { this.Invoke(delegado, new object[] { "Este usuario ya existe" }); } else { this.Invoke(delegado, new object[] { "Registro correcto, pero se ha alcanzado el \n maximo de usuarios, intenta conectarte más tarde" }); } // Se terminó el servicio. // Nos desconectamos atender.Abort(); server.Shutdown(SocketShutdown.Both); server.Close(); } break; case 2: //Login if (mensaje == "0") { nombre = Usuario.Text; DelegadoParaEscribir delegado = new DelegadoParaEscribir(DesbloquearFunciones); this.Invoke(delegado, new object[] { nombre }); } else { DelegadoParaEscribir delegado = new DelegadoParaEscribir(EscrivirInformacion); if (mensaje == "1") { this.Invoke(delegado, new object[] { "Usuario y/o contraseña incorrecta" }); } else if (mensaje == "2") { this.Invoke(delegado, new object[] { "Se ha alcanzado el maximo de usuarios conectados \n Intentalo más tarde" }); } else { this.Invoke(delegado, new object[] { Usuario.Text + " ya tiene una sesion abierta" }); } // Se terminó el servicio. // Nos desconectamos atender.Abort(); server.Shutdown(SocketShutdown.Both); server.Close(); } break; case 3: //El mas rapido DelegadoParaEscribir delegado5 = new DelegadoParaEscribir(EscribirRespuesta); RespuestasBox.Invoke(delegado5, new object[] { mensaje }); break; case 4: //Los que ganaron a Joel string[] ganadores = mensaje.Split('*'); string respuesta = ganadores[0]; for (int i = 1; i < ganadores.Length; i++) { respuesta = respuesta + "\r\n\r\n" + ganadores[i]; } DelegadoParaEscribir delegado3 = new DelegadoParaEscribir(EscribirRespuesta); RespuestasBox.Invoke(delegado3, new object[] { respuesta }); break; case 5: string [] Viciado = mensaje.Split(','); DelegadoParaEscribir delegado6 = new DelegadoParaEscribir(EscribirRespuesta); RespuestasBox.Invoke(delegado6, new object[] { "El jugador que mas partidas ha jugado es " + Viciado[0] + " y ha jugado " + Viciado[1] + " veces" }); break; case 6: //Actualiza la lista de conectados en el grid DelegadoParaEscribir delegado2 = new DelegadoParaEscribir(Listaconectados); ConectadosGrid.Invoke(delegado2, new object[] { mensaje }); break; case 7: //Crear partida o preguntar si quiere unirse a una if (mensaje == "-1") { MessageBox.Show("Lo sentimos, no se ha podido crear la partida"); } else { string[] partida = mensaje.Split(','); string pregunta = "Quieres unirte a una partida con " + partida[1]; DialogResult result1 = MessageBox.Show(pregunta, "Nueva partida", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result1 == DialogResult.Yes) { mensaje = "7/0/" + partida[0] + "," + nombre + ",YES"; } else { mensaje = "7/0/" + partida[0] + "," + nombre + ",NO"; } byte[] msg = System.Text.Encoding.ASCII.GetBytes(mensaje); server.Send(msg); } break; case 8: //Iniciar el form de la partida si hay suficientes jugadores trozos = mensaje.Split('-'); string [] aux = trozos[0].Split(','); if (aux[0] == "1") { string mensajeJugadores = trozos[1]; string mensajeCartas = trozos[2]; idPartida = Convert.ToInt32(aux[1]); ThreadStart ts = delegate { AbrirForm2(idPartida, mensajeCartas, mensajeJugadores); }; Thread T = new Thread(ts); T.Start(); } else { MessageBox.Show("No tienes suficientes amigos"); } break; case 9: //Envia mensaje del chat al formulario correcto formularios[partidas[idPartida]].chat(mensaje); break; case 10: if (mensaje == "0") { DelegadoParaEscribir delegado4 = new DelegadoParaEscribir(BloquearFunciones); this.Invoke(delegado4, new object[] { "" }); } break; case 11: //Envia la jugada realizada por un jugador al formulario correspondente formularios[partidas[idPartida]].Jugada(mensaje); break; case 12: //Un jugador se ha desconectado formularios[partidas[idPartida]].JugadorDesconectado(mensaje); break; case 13: //Jugadores ganan la ronda y pasan al siguiente nivel formularios[partidas[idPartida]].NextLevel(mensaje); break; } } }