Exemplo n.º 1
0
        private void Form1_Load(object sender, EventArgs e)
        {
            //Evento de carga del formulario.
            nombreJugadorLb.Text = this.usuario;

            //Pedimos al servidor que nos envie exclusivamente a nosotros la lista de conectados actualizada
            server.Enviar("3/");
            ConectadosGrid.ClearSelection();
        }
Exemplo n.º 2
0
        public void Accion3(string mensaje)
        {
            //Esta función es llamada cada vez que el thread de atención al servidor recibe un mensaje con el código 3,
            //que significa que la lista de usuarios conectados al servidor se ha actualizado.
            //Por tanto, esta función se encarga de actualizar la lista de conectados del DataGridView del formulario del cliente.

            //Primero de todo, vaciamos la tabla para que no salgan datos anteriores
            ConectadosGrid.ClearSelection();
            for (int j = 0; j < ConectadosGrid.RowCount; j++)
            {
                ConectadosGrid[0, j].Value = "";
            }
            string[] separado = mensaje.Split('/');
            if (separado.Length > 1)
            {
                //Configuración de parámetros de la tabla: Una columna, tantas filas como conectados menos 1 (el propio usuario),
                //sin cabeceras y sin casillas preseleccionadas.
                ConectadosGrid.ColumnCount          = 1;
                ConectadosGrid.RowCount             = separado.Length - 1;
                ConectadosGrid.ColumnHeadersVisible = false;
                ConectadosGrid.RowHeadersVisible    = false;
                ConectadosGrid.AutoSizeColumnsMode  = DataGridViewAutoSizeColumnsMode.Fill;
                ConectadosGrid.AutoSizeRowsMode     = DataGridViewAutoSizeRowsMode.AllCells;
                ConectadosGrid.ClearSelection();

                //Introducimos el nombre de los usuarios conectados en la DataGridView sin incluir al propio usuario
                int  j          = 0;
                bool encontrado = false;
                while (j < separado.Length && !encontrado)
                {
                    if (separado[j] != this.usuario)
                    {
                        ConectadosGrid[0, j].Value = separado[j];
                    }
                    else
                    {
                        encontrado = true;
                    }
                    j++;
                }
                while (j < separado.Length)
                {
                    ConectadosGrid[0, j - 1].Value = separado[j];
                    j++;
                }

                //Configura la alineación de las columnas al centro
                this.ConectadosGrid.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            }
        }
Exemplo n.º 3
0
        private void ListaConectados(string mensaje)
        {
            string[] trozos = mensaje.Split('/');
            int      numero = Convert.ToInt32(trozos[1]);

            if (numero != 0)
            {
                ConectadosGrid.ColumnCount = 1;
                ConectadosGrid.RowCount    = numero;
                for (int i = 2; i < trozos.Length; i++)
                {
                    mensaje = trozos[i].Split('\0')[0];
                    ConectadosGrid.Rows[i - 2].Cells[0].Value = mensaje;
                }
            }
            ConectadosGrid.ClearSelection();
        }
Exemplo n.º 4
0
        private void ConectadosGrid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int     fila       = e.RowIndex;
            Boolean encontrado = false;

            if (ConectadosGrid.CurrentCell.Value.ToString() != usuario)
            {
                if (invitados.Count() == 0)
                {
                    ConectadosGrid.Rows[fila].DefaultCellStyle.BackColor = Color.Green;
                    invitados.Add(ConectadosGrid.CurrentCell.Value.ToString());
                    numSeleccionados++;
                }
                else
                {
                    for (int i = 0; i < invitados.Count(); i++)
                    {
                        if (invitados[i] == ConectadosGrid.CurrentCell.Value.ToString())
                        {
                            encontrado = true;
                        }
                        if (!encontrado)
                        {
                            ConectadosGrid.Rows[fila].DefaultCellStyle.BackColor = Color.Green;
                            invitados.Add(ConectadosGrid.CurrentCell.Value.ToString());
                            numSeleccionados++;
                        } //else {
                          //    ConectadosGrid.Rows[fila].DefaultCellStyle.BackColor = Color.White;
                          //    invitados.Remove(ConectadosGrid.CurrentCell.Value.ToString());
                          //    numSeleccionados--;
                          //    MessageBox.Show("Se ha eliminado a " + ConectadosGrid.CurrentCell.Value.ToString() + " de la lista de invitados");
                          //}
                    }
                }
            }
            else
            {
                MessageBox.Show("Eres el anfitrión, no te puedes invitar");
            }
            ConectadosGrid.ClearSelection();
        }
Exemplo n.º 5
0
 private void Invitar_Click(object sender, EventArgs e)
 {
     try
     {
         //Invitar
         string mensaje = "9/";
         if (numSeleccionados >= 1)
         {
             for (int i = 0; i < numSeleccionados; i++)
             {
                 mensaje = mensaje + invitados[i] + ",";
             }
             mensaje = mensaje.Remove(mensaje.Length - 1);
             // Enviamos al servidor la consulta
             byte[] msg = System.Text.Encoding.ASCII.GetBytes(mensaje);
             server.Send(msg);
             //Limpiamos selección
             ConectadosGrid.ClearSelection();
             int tmp = ConectadosGrid.RowCount;
             for (int i = 0; i < tmp; i++)
             {
                 ConectadosGrid.Rows[i].DefaultCellStyle.BackColor = Color.White; //No va
             }
             invitados.Clear();
             numSeleccionados = 0;
         }
         else
         {
             MessageBox.Show("No se ha seleccionado ningún jugador");
         }
     }
     catch (Exception)
     {
         //Si hay excepcion imprimimos error y salimos del programa con return
         MessageBox.Show("Error en las invitaciones");
         return;
     }
 }
Exemplo n.º 6
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;
                }
            }
        }
Exemplo n.º 7
0
        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;
                }
            }
        }