Ejemplo n.º 1
0
 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;
     }
 }
Ejemplo n.º 2
0
        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;
                }
            }
        }