private void Desconectar_Click(object sender, EventArgs e) { try { conectados.Remove(usuario); usuario = ""; DelegadoParaActualizarSesion delegado2 = new DelegadoParaActualizarSesion(ActualizarSesion); SesionLbl.Invoke(delegado2); YAdesconectado = true; //Desconexión string mensaje = "0/"; //Enviamos al servidor la consulta byte[] msg = System.Text.Encoding.ASCII.GetBytes(mensaje); server.Send(msg); //Nos desconectamos atender.Abort(); this.BackColor = Color.Gray; MessageBox.Show("Desconectado"); server.Shutdown(SocketShutdown.Both); server.Close(); } catch (Exception) { //Si hay excepcion imprimimos error y salimos del programa con return MessageBox.Show("Error al desconectarse del servidor"); return; } }
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; } } }