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(); }
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; } }
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(); }
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(); }
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; } }
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; } } }
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; } } }