/// <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); }
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; } }
/// <summary> /// Conecta con el servidor /// </summary> public void Conectar(int IdCliente, string versionCliente) { ClienteTcp.EnviarComando(10, string.Format("Hola, mi ID de cliente es '{0}' y la versión es '{1}'. Mi nombres es '{2}', mi color es '{3}'", IdCliente, versionCliente, Nombre, Color.ToArgb())); }