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"); } } } }
public bool EsAdministrador(ClienteTCP cliente) { if (Clientes.ContainsKey(cliente) && Clientes[cliente].AdministradorServidor) { return(true); } return(false); }
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)); } }
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)); }
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); }
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(); } }
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; }
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(); } }
/// <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)); }
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; } }
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> /// 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()); } }
/// <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("'", "'"); 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; } }
private void Form1_Load(object sender, EventArgs e) { m_cliente = new ClienteTCP(); m_servidor = new ServidorTCP(); }