示例#1
0
        public void Actualizar()
        {
            Juego = JsonConvert.DeserializeObject <Juego>(ClienteTCP.Read());
            OnPropertyChange("Juego");

            switch (Juego.Ronda)
            {
            case 0:
                RestablecerCartas();
                break;

            case 1:
                ActualizarInfoJugador();
                ObtenerMano(ClienteTCP.Name());
                break;

            case 2:
                ObtenerFlop();
                break;

            case 3:
                ObtenerTurn();
                break;

            case 4:
                ObtenerRiver();
                break;

            default:
                break;
            }
        }
 private void Check(object sender, RoutedEventArgs e)
 {
     if (ViewModel.check())
     {
         ClienteTCP.Write(JsonConvert.SerializeObject(ViewModel.Juego));
     }
 }
 private void btnRegistrar_Click(object sender, EventArgs e)
 {
     if (fmVistaServidor.servidorIniciado == true)
     {
         if (!string.IsNullOrEmpty(txtNombre.Text) && !string.IsNullOrEmpty(txtAnio.Text) && !string.IsNullOrEmpty(txt1Apellido.Text) && !string.IsNullOrEmpty(txt2Apellido.Text) && !string.IsNullOrEmpty(txtPass.Text) && !string.IsNullOrEmpty(txtEstado.Text) && !string.IsNullOrEmpty(txtMarca.Text) && !string.IsNullOrEmpty(txtUsuario.Text) && !string.IsNullOrEmpty(txtPlaca.Text))
         {
             Conductor conductor = new Conductor()
             {
                 Nombre        = txtNombre.Text,
                 Anio          = txtAnio.Text,
                 Apellido1     = txt1Apellido.Text,
                 Apellido2     = txt2Apellido.Text,
                 Contrasenia   = txtPass.Text,
                 Estado        = txtEstado.Text,
                 Marca         = txtMarca.Text,
                 NombreUsuario = txtUsuario.Text,
                 Placa         = txtPlaca.Text
             };
             ClienteTCP.Registrar(conductor);
             this.Close();
             MessageBox.Show("Registro con éxito.", "Atención");//Mensaje de éxito
         }
         else
         {
             MessageBox.Show("No puede haber campos vacíos.", "Error");
         }
     }
     else
     {
         MessageBox.Show("No hay conexión al servidor.", "Error");
     }
 }
 private void btnRegistrarViaje_Click(object sender, EventArgs e)
 {
     if (fmVistaServidor.servidorIniciado == true)
     {
         if (!string.IsNullOrEmpty(cmbIDConductor.Text) && !string.IsNullOrEmpty(txtPtoPartida.Text) && !string.IsNullOrEmpty(txtPtoDestino.Text) && !string.IsNullOrEmpty(txtDescCliente.Text) && !string.IsNullOrEmpty(txtTiempoCliente.Text) && !string.IsNullOrEmpty(txtEstado.Text) && !string.IsNullOrEmpty(txtEstado.Text))
         {
             //Parámetros recibidos del cliente para ser introducidos en la base de datos posterior a ser enviados al servidor
             Viajes viaje = new Viajes()
             {
                 Id_Conductor = cmbIDConductor.Text,
                 PuntoPartida = txtPtoPartida.Text,
                 PuntoDestino = txtPtoDestino.Text,
                 Desc_Viaje   = txtDescCliente.Text,
                 Can_Horas    = txtTiempoCliente.Text,
                 Estado       = txtEstado.Text,
             };
             ClienteTCP.CrearViaje(viaje);
             this.Close();
             MessageBox.Show("Viaje registrado con éxito.", "Atención");//Mensaje de éxito
         }
         else
         {
             MessageBox.Show("No puede haber campos vacíos.", "Error");
         }
     }
     else
     {
         MessageBox.Show("No hay conexión al servidor.", "Error");
     }
 }
 private void btn_cliente_conectar_Click(object sender, EventArgs e)
 {
     if (m_cliente.IsConnected())
     {
         m_cliente.Desconectar();
     }
     else
     {
         int port;
         if (int.TryParse(txt_cliente_puerto.Text, out port))
         {
             m_cliente = new ClienteTCP();
             m_cliente.DataReceived += OnDataReceivedCliente;
             m_cliente.Connected    += OnStateChangeCliente;
             if (m_cliente.Conectar(txt_cliente_IP.Text, port))
             {
                 string strRecibido = string.Format("{0} Cliente-> {1}\r\n", DateTime.Now.ToString("HH:mm:ss"), "Conectado");
                 txt_cliente_recibido.BeginInvoke(new MethodInvoker(delegate { txt_cliente_recibido.Text += strRecibido; }));
             }
             else
             {
                 MessageBox.Show("NO SE HA PODIDO CONECTAR");
             }
         }
     }
 }
示例#6
0
 public bool EsAdministrador(ClienteTCP cliente)
 {
     if (Clientes.ContainsKey(cliente) && Clientes[cliente].AdministradorServidor)
     {
         return(true);
     }
     return(false);
 }
示例#7
0
 public Cliente(string nombre, string hostServidor, int IdCliente)
 {
     if (hostServidor != null)//Conectar
     {
         ClienteTcp = new ClienteTCP(hostServidor, 4444, "Cliente");
     }
     Nombre         = nombre;
     this.IdCliente = IdCliente;
 }
        private void Raise(object sender, RoutedEventArgs e)
        {
            string fichasStr = Interaction.InputBox("Indique la cantidad de fichas a apostar:", "Subir Apuesta", "100");
            int    fichas;

            if (fichasStr != "" && int.TryParse(fichasStr, out fichas))
            {
                ViewModel.Raise(fichas);
                ClienteTCP.Write(JsonConvert.SerializeObject(ViewModel.Juego));
            }
        }
示例#9
0
 public void ActualizarInfoJugador()
 {
     foreach (Jugador jugador in Juego.Jugadores)
     {
         if (jugador.NombreUsuario.Equals(ClienteTCP.Name()))
         {
             Jugador = jugador;
             OnPropertyChange("Jugador");
         }
     }
 }
 private void Call(object sender, RoutedEventArgs e)
 {
     if (ViewModel.Juego.Ronda == 0)
     {
         ViewModel.FlopCall();
     }
     else
     {
         ViewModel.RegularCall();
     }
     ClienteTCP.Write(JsonConvert.SerializeObject(ViewModel.Juego));
 }
示例#11
0
        public List <Usuario> ListarUsuarios(Usuario usuario)
        {
            var usuarios = new List <Usuario>();
            var cliente  = new ClienteTCP();

            try
            {
                cliente.Conectar("larc.inf.furb.br", 1012);
                var retorno     = new ListarUsuariosComando(cliente, usuario).Executar();
                var listaString = retorno.GetConteudo().Split(":");

                if (listaString.Length >= 3)
                {
                    /**
                     *
                     * A ideia deste trecho é processar os retornos, cada retorno é composto
                     * por tres pedaços, que são: "id:nome:vitorias:"
                     * Exemplo: 2756:João da Silva:4:1235:José da Silva:0:1243:Manuel da Silva:2:
                     */
                    var     c    = 0;
                    var     id   = "";
                    var     name = "";
                    Usuario u;
                    foreach (var item in listaString)
                    {
                        c++;
                        switch (c)
                        {
                        case 1:
                            id = item;
                            break;

                        case 2:
                            name = item;
                            break;

                        case 3:
                            c          = 0;               // neste ponto recomeçamos
                            u          = new Usuario(id); // montamos o obj
                            u.UserName = name;
                            usuarios.Add(u);              // adicionamos na lista
                            break;
                        }
                    }
                }
            }
            finally
            {
                cliente.Desconectar();
            }
            return(usuarios);
        }
示例#12
0
        private void btnLoginCliente_Click(object sender, EventArgs e)
        {
            // Si el campo esta rellenado, continue, si no, arroja error
            if (!string.IsNullOrEmpty(txtUsuarioCliente.Text) && !string.IsNullOrEmpty(txtUsuarioCliente.Text) && !string.IsNullOrEmpty(txtContraseniaCliente.Text))
            {
                //Si los datos coinciden con la base de datos, continue
                if (datos.LoginCliente(txtUsuarioCliente.Text, txtContraseniaCliente.Text))
                {
                    //Se le asigna al conductor las variables, así se pueden desplegar en fmVistaServidor
                    conductor = new Conductor {
                        NombreUsuario = txtUsuarioCliente.Text, Contrasenia = txtContraseniaCliente.Text
                    };

                    //Se conecta con el cliente TCP
                    if (ClienteTCP.Conectar(conductor))
                    {
                        //Al conectarse:
                        MessageBox.Show("Conexión con éxito.", "Usuario conectado");      //Muestra mensaje al conectarse
                        lblEstadoCliente.Text = "Conectado al servidor 127.0.0.1, 16830"; //Cambia el label mostrando la conexión
                        //Los siguientes botones se habilitan:
                        btnDesconectar.Enabled = true;                                    //Cerrar sesión

                        btnCrearViajeCliente.Enabled = true;                              //Crear viaje

                        txtUsuarioCliente.ReadOnly     = true;                            //Usuario solo lectura
                        txtContraseniaCliente.ReadOnly = true;                            //Contraseña solo lectura
                        //Los siguientes botones se deshabilitan:
                        btnLoginCliente.Enabled     = false;                              //Iniciar sesión
                        btnRegistrarCliente.Enabled = false;                              //Registrarse
                        btnSalirCliente.Enabled     = false;                              //El botón de salir (necesita cerrar sesión primero)
                        dgvViajeActivo.DataSource   = datos.ViajeActivo(txtUsuarioCliente.Text);
                        btnFinalizarViaje.Enabled   = true;
                        btnRefrescar.Enabled        = true;
                    }
                    else
                    {
                        MessageBox.Show("Verifique la conexión al servidor.", "Error");
                    }
                }
                else
                {
                    MessageBox.Show("Fallo al iniciar sesión, datos incorrectos o conexión no disponible.", "Error");
                }
            }
            else
            {
                MessageBox.Show("Debe ingresar su usuario y contraseña.", "Alerta");
            }
        }
        private void conectarServidor(object sender, RoutedEventArgs e)
        {
            string servidor = this.textBox_servidor.Text;
            Int32  puerto   = Int32.Parse(this.textBox_puerto.Text);
            string username = this.textBox_username.Text;
            string password = this.textBox_password.Password;

            Jugador jugador = new Jugador(username, password, 10000, true);
            string  json    = JsonConvert.SerializeObject(jugador);

            ClienteTCP.Init(servidor, puerto, username);
            ClienteTCP.Write(json);

            string jsonResponse = ClienteTCP.Read();
            bool   loginExitoso = JsonConvert.DeserializeObject <bool>(jsonResponse);

            if (loginExitoso)
            {
                //Mostrar mensaje de login exitoso
                string            caption = "Inicio de Sesión Exitoso";
                string            message = "Bienvenido a la mesa " + username + "!";
                MessageBoxButtons buttons = MessageBoxButtons.OK;

                //Muestra el mensaje
                System.Windows.Forms.MessageBox.Show(message, caption, buttons);

                Mesa mesa = new Mesa();
                //Abrir la pantalla de mesa
                mesa.Show();
                //Cerrar la pantalla de login
                this.Close();
                mesa.IniciarHilo(); // Escuchar por cambios en el juego
            }
            else
            {
                //Mostrar advertencia de credenciales incorrectos
                string            caption = "Error con los credenciales";
                string            message = "El nombre de usuario o password es incorrecto!";
                MessageBoxButtons buttons = MessageBoxButtons.OK;

                //Muestra el mensaje
                System.Windows.Forms.MessageBox.Show(message, caption, buttons);

                ClienteTCP.Disconnect();
            }
        }
示例#14
0
 private void btnDesconectar_Click(object sender, EventArgs e)
 {
     //Al hacer click en cerrar sesión:
     ClienteTCP.Desconectar(conductor);//Se desconecta de la conexión TCP
     MessageBox.Show("Desconexión con éxito.", "Cliente desconectado");
     lblEstadoCliente.Text = "Desconectado";
     //Los siguientes botones se habilitan:
     btnRegistrarCliente.Enabled    = true;  //Registrarse
     btnSalirCliente.Enabled        = true;  //Salir
     btnLoginCliente.Enabled        = true;  //Iniciar sesión
     txtUsuarioCliente.ReadOnly     = false; //Campo usuario se vuelve editable
     txtContraseniaCliente.ReadOnly = false; //Campo contraseña se vuelve editable
     //Los siguientes botones se deshabilitan:
     btnDesconectar.Enabled    = false;      //Cerrar sesión
     dgvViajeActivo.Enabled    = false;
     btnFinalizarViaje.Enabled = false;
     btnRefrescar.Enabled      = false;
 }
示例#15
0
        public Mensagem RetornarMensagem(Usuario usuario)
        {
            var cliente = new ClienteTCP();

            try
            {
                cliente.Conectar("larc.inf.furb.br", 1012);
                var retorno = new RetornarMensagemComando(cliente, usuario).Executar();
                if (retorno.GetConteudo().Trim().Equals(":")) // quando vier apenas ":" significa que não há msg
                {
                    return(new Mensagem("Sem mensagens\r\n"));
                }
                return(retorno);
            }
            finally
            {
                cliente.Desconectar();
            }
        }
示例#16
0
        /// <summary>
        /// Envia datos a un cliente
        /// </summary>
        public void EnviarComando(ushort comando, string texto, ClienteTCP cliente)
        {
            if (Clientes.ContainsKey(cliente))
            {
                Cliente jugador = Clientes[cliente];

                string[] nombres = Enum.GetNames(typeof(ConsoleColor));
                Console.BackgroundColor =
                    (ConsoleColor)
                    Enum.Parse(typeof(ConsoleColor), nombres[jugador.GetHashCode() % (nombres.Length - 1)]);
                Console.WriteLine("Servidor->" + jugador.Nombre + ": " + comando + " " + texto);
                Console.ResetColor();
            }
            else
            {
                Console.WriteLine("Servidor->Cliente: " + comando + " " + texto);
            }

            cliente.EnviarComando(comando, texto);
        }
 private void Fold(object sender, RoutedEventArgs e)
 {
     ViewModel.Fold();
     ClienteTCP.Write(JsonConvert.SerializeObject(ViewModel.Juego));
 }
示例#18
0
        void ComandoRecibido(ushort comando, string[] parametros, string cadena, ClienteTCP clienteTcp)
        {
            switch (comando)
            {
            case 100:                                      //Nombre repetido
                MessageBox.Show("Error, nombre repetido");
                foreach (Cliente jugador in this.clientes) //Borrar el cliente actual
                {
                    if (jugador.ClienteTcp == clienteTcp)
                    {
                        clientes.Remove(jugador);
                        jugador.ClienteTcp.Desconectar();
                        break;
                    }
                }
                break;

            case 101:                                      //Color repetido
                MessageBox.Show("Error, color repetido");
                foreach (Cliente jugador in this.clientes) //Borrar el cliente actual
                {
                    if (jugador.ClienteTcp == clienteTcp)
                    {
                        clientes.Remove(jugador);
                        jugador.ClienteTcp.Desconectar();
                        break;
                    }
                }
                break;

            case 103:    //Versión antigua
                MessageBox.Show("El servidor necesita de una versión más reciente del programa para poder jugar en él.\r\nActualiza el programa para poder continuar.",
                                "Nueva versión necesaria", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                foreach (Cliente jugador in this.clientes)    //Borrar el cliente actual
                {
                    if (jugador.ClienteTcp == clienteTcp)
                    {
                        clientes.Remove(jugador);
                        jugador.ClienteTcp.Desconectar();
                        break;
                    }
                }
                break;

            case 12:    //Login correcto
                ActualizarDatosMapaServidor();
                break;

            case 13:    //Jugador es administrador
                foreach (Cliente jugadorLocal in clientes)
                {
                    if (jugadorLocal.ClienteTcp == clienteTcp)
                    {
                        jugadorLocal.AdministradorServidor = true;
                        break;
                    }
                }
                break;

            case 11:    //Jugador desconectado
                try
                {
                    clienteTcp.Desconectar();
                }
                catch { }
                foreach (Cliente jugadorLocal in clientes)
                {
                    if (jugadorLocal.ClienteTcp == clienteTcp)
                    {
                        MessageBox.Show("El jugador " + jugadorLocal.Nombre + " ha sido expulsado de la partida");
                        clientes.Remove(jugadorLocal);
                        try
                        {
                            foreach (ItemLista item in listaJugadores.Items)
                            {
                                if (string.Compare(item.Tag.Nombre, jugadorLocal.Nombre, true) == 0)
                                {
                                    listaJugadores.Items.Remove(item);
                                    break;
                                }
                            }
                        }
                        catch { }
                        break;
                    }
                }

                break;

            case 200:    //Informacion sobre el mapa
                actualizarMapa = false;

                bool cambiado = false;

                if (semillaMapa.Value != int.Parse(parametros[0]))
                {
                    semillaMapa.Value = int.Parse(parametros[0]);
                    cambiado          = true;
                }
                if (neutrales.Value != int.Parse(parametros[1]))
                {
                    neutrales.Value = int.Parse(parametros[1]);
                    cambiado        = true;
                }

                List <Cliente> listaClientes = mapa.Jugadores;
                if ((parametros.Length - 2) / 2 != listaJugadores.Items.Count)    //Jugadores añadidos
                {
                    cambiado = true;
                    listaJugadores.Items.Clear();

                    listaClientes = new List <Cliente>();
                    for (int contador = 2; contador < parametros.Length; contador += 3)
                    {
                        Cliente jugador = new Cliente(parametros[contador], null, 0);
                        jugador.Color = Color.FromArgb(int.Parse(parametros[contador + 1]));
                        jugador.AdministradorServidor = parametros[contador + 2] == "1" ? true : false;
                        listaClientes.Add(jugador);
                        JugadorConectado(jugador);
                    }
                }
                if (cambiado)
                {
                    mapa.Inicializar((int)semillaMapa.Value, listaClientes, (int)neutrales.Value);
                }

                actualizarMapa = true;
                break;

            case 201:    //Iniciar partida
                foreach (Cliente cliente in clientes)
                {
                    cliente.ClienteTcp.DatosRecibidos -= ComandoRecibido;
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
                break;
            }
        }
示例#19
0
        void ComandoRecibido(ushort comando, string[] parametros, string cadena, ClienteTCP clienteTcp)
        {
            if (cerrando)
            {
                return;
            }
            switch (comando)
            {
            case 2:     //Ping
                clienteTcp.EnviarComando(3, "PING OK");
                break;

            case 51:     //Inicio de ronda
                numeroRondaActual = int.Parse(parametros[0]);
                mapa.RondaActual  = numeroRondaActual;
                rondaActual.Text  = "Ronda " + numeroRondaActual;
                Informacion("Inicio de la ronda " + numeroRondaActual);
                mapa.Refresh();
                break;

            case 52:     //Inicio de turno de jugador
                Informacion("Turno del jugador " + parametros[0]);
                rondaActual.Text = "Ronda " + numeroRondaActual;

                lblTurno.ForeColor = Color.FromArgb(int.Parse(parametros[1]));
                peticion.Left      = lblTurno.Right + 5;
                clienteActual      = null;

                lblTurno.Text = "Turno de " + parametros[0];
                //Comprobar si hay tiempo limite
                if (parametros.Length > 2)
                {
                    TiempoRestante = int.Parse(parametros[2]);
                    timer1.Enabled = true;
                }

                foreach (Cliente jugador in Clientes)
                {
                    if (string.Compare(jugador.Nombre, parametros[0], true) == 0)
                    {
                        clienteActual      = jugador;
                        mapa.JugadorActual = clienteActual;

                        if (alarmaAlInicioDelTurnoDelJugadorToolStripMenuItem.Checked)
                        {
                            ReproducirAlarma();
                        }

                        toolStrip2.Enabled       = true;
                        toolStripButton6.Enabled = true;
                        toolStripButton4.Enabled = true;

                        listaJugadores.Items.Remove(clienteActual);
                        if (listaJugadores.SelectedIndex == -1)
                        {
                            listaJugadores.SelectedIndex = 0;
                        }

                        bFinTurno.Visible = true;
                        jugador.ClienteTcp.EnviarComando(53, "Comando de inicio de turno recibido");
                        this.Invoke(new EventHandler(EnviarFlota), new object[] { null, null });     //Enviar ataque
                        break;
                    }
                }
                if (clienteActual == null)
                {
                    HerramientaCancelada();
                    peticion.Text = "Esperando a que acabe su turno....";
                    clienteActual = null;

                    toolStrip2.Enabled = true;
                    if (Clientes.Count == 1)
                    {
                        toolStripButton6.Enabled = false;
                    }
                    else
                    {
                        toolStripButton6.Enabled = false;
                        toolStripButton4.Enabled = false;
                    }
                    bFinTurno.Visible  = false;
                    mapa.JugadorActual = null;
                }
                break;

            case 204:     //Fin de tiempo de turno
                bFinTurno.PerformClick();
                break;

            case 60:     //Fin de partida
                Informacion("El jugador " + parametros[0] + " ha ganadao la partida", true);

                try
                {
                    lblTurno.Text      = "¡El jugador " + parametros[0] + " ha ganadao la partida!";
                    lblTurno.ForeColor = mapa.BuscarJugador(parametros[0]).Color;
                    peticion.Text      = string.Empty;
                    CancelarHerramienta(null, null);
                }
                catch
                {
                }
                if (Clientes != null && Clientes.Count > 0)
                {
                    Clientes[0].ClienteTcp.EnviarComando(302, "Salir del servidor");
                }

                break;

            case 61:     //Jugador eliminado

                Informacion("El jugador " + parametros[0] + " ha sido eliminado", true);
                Cliente eliminado = mapa.BuscarJugador(parametros[0]);
                if (eliminado != null)
                {
                    eliminado.Derrotado = true;
                }

                break;

            case 62:     //Jugador sin planetas
                Informacion("El jugador " + parametros[0] + " no tiene ningún planeta conquistado");
                Cliente sinplanetas = mapa.BuscarJugador(parametros[0]);
                if (sinplanetas != null)
                {
                    sinplanetas.PoseePlaneta = false;
                }

                break;

            case 70:     //Llegada de flota
                Informacion(string.Format("Han llegado {0} naves de refuerzo al planeta {1}", parametros[1],
                                          parametros[0]));
                break;

            case 72:     //Jugador retirado
                Informacion(
                    string.Format(
                        "El jugador {0} se ha retirado de la partida. Al final del turno sus planetas serán neutrales.",
                        parametros[0]), true);
                break;

            case 71:     //Batalla
                Batalla.ResultadoBatalla resultado = (Batalla.ResultadoBatalla) int.Parse(parametros[3]);

                string dueño = parametros[2] == string.Empty ? "Neutral" : parametros[2];
                if (resultado == Batalla.ResultadoBatalla.GanaAtacante)
                {
                    Informacion(
                        string.Format(
                            "El planeta {0} ({1}) ha caído ante una flota de {2} naves del jugador {3}. Han sobrevivido {4} naves."
                            , parametros[0], dueño, parametros[4], parametros[1], parametros[6]), true);
                }
                else if (resultado == Batalla.ResultadoBatalla.GanaDefensor)
                {
                    string texto =
                        string.Format(
                            "El planeta {0} ({1}) se ha defendido con {4} naves de un ataque de {3} naves del jugador {2}."
                            , parametros[0], dueño, parametros[1], parametros[4], parametros[5]);
                    if (parametros[2] != string.Empty)     //No es neutral
                    {
                        texto += " Han sobrevivido " + parametros[7] + " naves.";
                    }
                    Informacion(texto, true);
                }
                else     //Empate
                {
                    Informacion(
                        string.Format(
                            "La batalla en el planeta {0} entre {1} naves del jugador {2} y {3} naves del jugador {4} ha terminado en empate. Han sobrevivido {5} naves del atacante y {6} del defensor."
                            , parametros[0], parametros[4], parametros[1], parametros[5], dueño, parametros[6],
                            parametros[7]), true);
                }
                break;

            case 206:     //Actualizacion de datos
                mapa.CargarDatos(parametros);
                break;

            case 210:     //Cargar partida
                mapa.Inicializar(int.Parse(parametros[0]), mapa.Jugadores, int.Parse(parametros[1]));
                Informacion("El administrador ha cargado una nueva partida", true);
                break;

            case 401:     //Chat de administrador
                ListViewItem item = new ListViewItem();
                item.Text = "Administrador";
                item.SubItems.Add(parametros[0]);
                item.Font      = new Font(item.Font, FontStyle.Bold);
                item.ForeColor = Color.Black;
                listaChat.Items.Add(item);

                item.EnsureVisible();

                if (alarmaAlRecibirMensajeDeChatToolStripMenuItem.Checked)
                {
                    MensajeNuevo();
                }
                break;

            case 402:     //Chat de jugador

                ListViewItem itemChat = new ListViewItem();
                itemChat.Text = parametros[0];
                itemChat.SubItems.Add(parametros[1]);
                foreach (Cliente jugador in mapa.Jugadores)
                {
                    if (jugador.Nombre == parametros[0])
                    {
                        itemChat.ForeColor = jugador.Color;
                        break;
                    }
                }
                listaChat.Items.Add(itemChat);

                itemChat.EnsureVisible();

                if (alarmaAlRecibirMensajeDeChatToolStripMenuItem.Checked)
                {
                    MensajeNuevo();
                }

                break;
            }
        }
示例#20
0
        /// <summary>
        /// Datos recibidos por cualquier cliente
        /// </summary>
        void ComandoRecibido(ushort comando, string[] parametros, string cadena, ClienteTCP clienteTcp)
        {
            if (comando == 3) //Ping
            {
                return;
            }

            if (Clientes.ContainsKey(clienteTcp))
            {
                try
                {
                    string[] nombres = Enum.GetNames(typeof(ConsoleColor));
                    Console.ForegroundColor =
                        (ConsoleColor)
                        Enum.Parse(typeof(ConsoleColor),
                                   nombres[Clientes[clienteTcp].GetHashCode() % (nombres.Length - 1)]);
                    if (Console.ForegroundColor == ConsoleColor.Black)
                    {
                        Console.ForegroundColor = ConsoleColor.White;
                    }

                    if (EsAdministrador(clienteTcp))
                    {
                        Console.WriteLine(Clientes[clienteTcp].Nombre + "(*): " + cadena);
                    }
                    else
                    {
                        Console.WriteLine(Clientes[clienteTcp].Nombre + ": " + cadena);
                    }

                    Console.ResetColor();
                }
                catch
                {
                }
            }
            else
            {
                Console.WriteLine("Cliente: " + cadena);
            }

            try
            {
                switch (comando)
                {
                case 10:     //Cliente conectado
                    if (AceptarNuevosJugadores == false)
                    {
                        EnviarComando(102, "Partida ya iniciada", clienteTcp);
                        return;
                    }

                    if (Programa.CompararVersiones(InformacionPrograma.VersionActual, parametros[1]) > 0)
                    {
                        //Version cliente antigua
                        EnviarComando(103, "Versión antigua", clienteTcp);
                        return;
                    }

                    Cliente jugador = new Cliente(parametros[2], null, int.Parse(parametros[0]));
                    jugador.Color      = Color.FromArgb(int.Parse(parametros[3]));
                    jugador.ClienteTcp = clienteTcp;
                    foreach (System.Collections.Generic.KeyValuePair <ClienteTCP, Cliente> elemento in Clientes)
                    {
                        if (string.Compare(elemento.Value.Nombre, jugador.Nombre, true) == 0)     //Nombre repetido
                        {
                            EnviarComando(100, "Nombre repetido", clienteTcp);
                            return;
                        }
                        if (elemento.Value.Color.ToArgb() == jugador.Color.ToArgb())     //Color repetido
                        {
                            EnviarComando(101, "Color repetido", clienteTcp);
                            return;
                        }
                    }
                    if (Clientes.Count == 0)     //Primer conectado, es el admin
                    {
                        jugador.AdministradorServidor = true;
                        EnviarComando(13, "Eres administrador", clienteTcp);
                    }
                    Clientes.Add(clienteTcp, jugador);

                    //Todo correcto
                    EnviarComando(12, "Login correcto", clienteTcp);

                    ActualizarParametrosPartida();

                    break;

                case 11:     //Desconectado
                    if (Clientes.ContainsKey(clienteTcp))
                    {
                        if (Clientes.Count == 1)     //Ultimo jugador desconectado
                        {
                            Console.WriteLine("------>Ultimo jugador desconectado, cerrando servidor");
                            Programa.EstadoEspera.Set();
                        }

                        try
                        {
                            foreach (Planeta planeta in Mapa.Planetas)
                            {
                                if (planeta.Dueño == Clientes[clienteTcp])
                                {
                                    planeta.Dueño = null;
                                }
                            }
                        }
                        catch
                        {
                        }
                        DifundirMensaje(72,
                                        string.Format("El jugador '{0}' ha sido retirado de la partida.",
                                                      Clientes[clienteTcp].Nombre));
                        if (borrarFinTurno == null)
                        {
                            borrarFinTurno = new List <Cliente>();
                        }
                        borrarFinTurno.Add(Clientes[clienteTcp]);
                        if (jugadorActual != null && jugadorActual == Clientes[clienteTcp])
                        {
                            //Acabar turno
                            EsperandoFinTurno.Set();
                        }
                    }
                    break;

                case 300:     //Informacion del mapa
                    if (EsAdministrador(clienteTcp))
                    {
                        if (Mapa == null)
                        {
                            Mapa = new Mapa();
                        }
                        Mapa.ModoGrafico = false;
                        Mapa.Semilla     = int.Parse(parametros[0]);
                        Mapa.Neutrales   = int.Parse(parametros[1]);
                        Mapa.Inicializar(Mapa.Semilla, new List <Cliente>(ObtenerJugadores()), Mapa.Neutrales);
                        ActualizarParametrosPartida();
                    }
                    break;

                case 301:     //Iniciar partida
                    if (EsAdministrador(clienteTcp) && Clientes.Count > 1)
                    {
                        Console.WriteLine("------>Partida iniciada");
                        IniciarPartida();
                    }
                    break;

                case 302:     //Salir
                    if (EsAdministrador(clienteTcp))
                    {
                        Console.WriteLine("------>Cerrar el servidor");
                        Programa.EstadoEspera.Set();
                    }
                    break;

                case 303:     //Segundos limite
                    if (EsAdministrador(clienteTcp))
                    {
                        SegundosLimiteTurno = int.Parse(parametros[0]);
                    }
                    break;

                case 304:     //Expulsar jugador
                    if (EsAdministrador(clienteTcp))
                    {
                        foreach (System.Collections.Generic.KeyValuePair <ClienteTCP, Cliente> elemento in Clientes)
                        {
                            if (string.Compare(elemento.Value.Nombre, parametros[0], true) == 0)
                            {
                                Clientes.Remove(elemento.Key);
                                ActualizarParametrosPartida();
                                EnviarComando(11, "Adios", elemento.Key);
                                elemento.Key.Desconectar();

                                if (elemento.Value.AdministradorServidor)     //Buscar nuevo admin
                                {
                                    foreach (
                                        System.Collections.Generic.KeyValuePair <ClienteTCP, Cliente> cliente in
                                        Clientes)
                                    {
                                        cliente.Value.AdministradorServidor = true;
                                        EnviarComando(13, "Eres administrador", cliente.Key);

                                        break;
                                    }
                                }
                                break;
                            }
                        }
                        ActualizarParametrosPartida();
                    }
                    break;

                case 400:     //Chat de administrador
                    if (EsAdministrador(clienteTcp))
                    {
                        DifundirMensaje(401,
                                        string.Format("El administrador envia el siguiente mensaje: '{0}'", parametros[0]));
                    }
                    break;

                case 402:     //Chat entre jugadores
                    foreach (System.Collections.Generic.KeyValuePair <ClienteTCP, Cliente> elemento in Clientes)
                    {
                        if (elemento.Value.Nombre == parametros[0])
                        {
                            elemento.Key.EnviarComando(402,
                                                       string.Format("El jugador '{0}' envia el mensaje \"'{1}'\" a '{2}'",
                                                                     Clientes[clienteTcp], parametros[1], parametros[0]));
                            break;
                        }
                    }
                    break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.ToString());
            }
        }
示例#21
0
        /// <summary>
        /// Datos recibidos del jugador que juega el turno actual
        /// </summary>
        void ComandoJugadorActualRecibidos(ushort comando, string[] subCadenas, string cadena, ClienteTCP cliente)
        {
            switch (comando)
            {
            case 53:     //Inicio de ronda recibido correctamente
                if (timer != null)
                {
                    timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
                }
                break;

            case 203:     //Fin de turno
                EnviarComando(1, "OK", cliente);
                EsperandoFinTurno.Set();
                break;

            case 205:     //Envio de ataque (naves,origen,destino)
                Flota flota = new Flota();
                flota.Origen            = Mapa.ObtenerPlaneta(subCadenas[1]);
                flota.Destino           = Mapa.ObtenerPlaneta(subCadenas[2]);
                flota.TecnologiaMilitar = flota.Origen.TecnologiaMilitar;
                flota.Naves             = int.Parse(subCadenas[0]);
                if (flota.Naves > flota.Origen.Naves)
                {
                    flota.Naves = flota.Origen.Naves;
                }
                flota.Origen.Naves -= flota.Naves;

                flota.Distancia    = Cliente.CalcularDistancia(flota.Origen, flota.Destino);
                flota.RondaSalida  = ronda;
                flota.RondaLlegada = (ronda + (int)Math.Round(flota.Distancia));
                Clientes[cliente].Flotas.Add(flota);

                EnviarComando(1, "OK", cliente);
                break;

            case 210:     //Cargar partida
                if (Clientes[cliente].AdministradorServidor)
                {
                    ronda = int.Parse(subCadenas[2]);
                    DifundirMensaje(comando,
                                    string.Format("Cargar mapa de semilla '{0}' y '{1}' neutrales", subCadenas[0], subCadenas[1]));
                    Mapa.Inicializar(int.Parse(subCadenas[0]), Mapa.Jugadores, int.Parse(subCadenas[1]));
                    Mapa.RondaActual = ronda;

                    System.Windows.Forms.Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                    System.Windows.Forms.Application.DoEvents();

                    string datos = subCadenas[3].Replace("&apos;", "'");
                    DifundirMensaje(206, datos);
                    Mapa.CargarDatos(ClienteTCP.ObtenerSubCadenas(datos));

                    System.Windows.Forms.Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                    System.Windows.Forms.Application.DoEvents();

                    iniciarRonda = true;
                    EsperandoFinTurno.Set();
                }
                break;
            }
        }
示例#22
0
 private void Form1_Load(object sender, EventArgs e)
 {
     m_cliente  = new ClienteTCP();
     m_servidor = new ServidorTCP();
 }