Exemple #1
0
        public Principal()
        {
            InitializeComponent();

            this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);

            Actualizador.Actualizacion.ActualizacionDisponible +=
                new Actualizador.Actualizacion.DelegadoActualizacionDisponible(Actualizacion_ActualizacionDisponible);
            Actualizador.Actualizacion.ComprobarActualizacion(InformacionPrograma.VersionActual, false,
                                                              InformacionPrograma.UrlActualizacion);


            if (InformacionPrograma.Mono == false)
            {
                interfazToolStripMenuItem.Visible = true;
                office2007ToolStripMenuItem.PerformClick();
            }
            else
            {
                interfazToolStripMenuItem.Visible = false;
                splitContainer1.BackColor         = Color.FromArgb(159, 190, 230);
            }


            //Imagenes
            this.iniciarNuevaPartidaToolStripMenuItem.Image = Programa.ObtenerImagenIncrustada("package_games_board");
            this.toolStripButton2.Image = Programa.ObtenerImagenIncrustada("package_games_board");
            this.toolStripButton6.Image = Programa.ObtenerImagenIncrustada("Clanbomber");
            this.toolStripButton5.Image = Programa.ObtenerImagenIncrustada("Search");
            this.toolStripButton4.Image = Programa.ObtenerImagenIncrustada("Administrative_Tool");
            this.toolStripButton7.Image = Programa.ObtenerImagenIncrustada("softwareD");
            this.toolStripButton3.Image = Programa.ObtenerImagenIncrustada("calculadora");
            this.toolStripButton1.Image = Programa.ObtenerImagenIncrustada("rendimiento");

            if (InformacionPrograma.Mono)
            {
                this.Text += " Mono Version";
            }
        }
        /// <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());
            }
        }
Exemple #3
0
 private void espacioToolStripMenuItem_Click(object sender, EventArgs e)
 {
     mapa.ImagenFondo = Programa.ObtenerImagenIncrustada("fondoespacio");
 }