예제 #1
0
  /** Clase de ventana visual del servidor */
  public static void main(String[] args) {
    BaseDeDatosPreguntas.iniciarConexion();
    BaseDeDatosUsuarios.iniciarConexion();
    Servidor s = new Servidor();
    s.inicio_servidor();

    addMensaje("Esperando conexión con algún cliente...\n");
    launch(args);
    try {
      Thread.sleep(10);
    } catch (InterruptedException e) {
    }
  }
예제 #2
0
    public void run() {
      ArrayList<String> Datos_Usuario = new ArrayList<>();

      String accion = "";
      String dato = "";

      try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

        // Envía mensaje de comunicación establecida
        out.writeObject("ACK");
        // Recibe la acción que va a hacer el cliente
        accion = in.readLine();
        addMensaje("Quiere: " + accion + "\n");

        out.writeObject("ACK");

        switch (accion) {
          case "Comprobar":
            for (int i = 0; i < CVentanaCaptura.aLNoticiasFicheros.size(); i++) {

              out.writeObject(CVentanaCaptura.aLNoticiasFicheros.get(i));
              accion = in.readLine();

              if (!"ACK".equals(accion)) throw new IOException("Conexión errónea: " + accion);
            }
            out.writeObject("FIN");
            accion = in.readLine();

            if (!"ACK".equals(accion)) throw new IOException("Conexión errónea: " + accion);
            addMensaje("Comprobación realizada\n");
            break;
          case "Crear_Usuario":
            addMensaje("Empiezo a recibir la información\n");
            do {

              dato = in.readLine();
              addMensaje("Ha introducido: " + dato + "\n");
              if (!"FIN".equals(dato)) {
                Datos_Usuario.add(dato);
              }
              out.writeObject("ACK");

            } while (!"FIN".equals(dato));

            try {
              DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
              Date startDate = null;
              try {
                startDate = df.parse(Datos_Usuario.get(3));
                String newDateString = df.format(startDate);

              } catch (ParseException e) {

              }
              if (Datos_Usuario.get(4) == null) {
                Datos_Usuario.add(4, "Default_Image");
              }
              BaseDeDatosUsuarios.nuevoUsuario(
                  Datos_Usuario.get(0),
                  Datos_Usuario.get(1),
                  Datos_Usuario.get(2),
                  startDate,
                  Datos_Usuario.get(4));
              out.writeObject("BIEN");
              ArrayList<Tipo_Amigo> Tipo = new ArrayList<Tipo_Amigo>();
              Amigos_usuarios.put(Datos_Usuario.get(0), Tipo);

            } catch (Exception e) {
              e.printStackTrace();
              if (e.getMessage().endsWith("Usuario repetido")) {
                out.writeObject("USER");
              }
              if (e.getMessage().endsWith("Email repetido")) {
                out.writeObject("MAIL");
              }
            }

            break;
          case "Log":
            addMensaje("Empiezo a recibir la información\n");

            do {

              dato = in.readLine();
              addMensaje("Ha introducido: " + dato + "\n");
              if (!"FIN".equals(dato)) {
                Datos_Usuario.add(dato);
              }
              out.writeObject("ACK");

            } while (!"FIN".equals(dato));

            if (Clientes_conectados.contains(Datos_Usuario.get(0))) {
              out.writeObject("ACTIVO");
            } else {
              try {
                Datos_Enviar_Usuario =
                    BaseDeDatosUsuarios.getUsuarioPorNombreOID(
                        Datos_Usuario.get(0), null, Datos_Usuario.get(1));
                out.writeObject("BIEN");
                for (String string : Datos_Enviar_Usuario) {

                  out.writeObject(string);
                  addMensaje("Le envío: " + string + "\n");
                  dato = in.readLine();
                  if (!"ACK".equals(dato)) throw new IOException("Conexión errónea: " + dato);
                }
                out.writeObject("FIN");

                dato = in.readLine();

                if (!"ACK".equals(dato)) throw new IOException("Conexión errónea: " + dato);

                Clientes_conectados.add(Datos_Enviar_Usuario[0]);
              } catch (SQLException e) {
                out.writeObject("SQL");
              }
            }
            break;
          case "Jugar":
            ArrayList<Preguntas> Preguntas_Jugador1 = new ArrayList<>();
            ArrayList<Preguntas> Preguntas_Jugador2 = new ArrayList<>();

            dato = in.readLine();
            if (Clientes.size() == 0) {
              Clientes.add(socket);
              out.writeObject("Nadie");
              return;
            } else {

              System.out.println("Soy el segundo cliente");
              // TODO: mirar ip
              Socket socket2 = new Socket("127.0.0.1", 9899);
              OutputStream os = socket2.getOutputStream();
              PrintWriter out2 = new PrintWriter(os, true);
              System.out.println("Conexion establecida");
              //						Socket socket2=MatchMaking.get(dato).get(0);
              Clientes.remove(0);
              // BufferedReader in2 = new BufferedReader(new
              // InputStreamReader(socket.getInputStream()));
              BufferedReader in2 =
                  new BufferedReader(new InputStreamReader(socket2.getInputStream()));
              // ObjectOutputStream out2 = new ObjectOutputStream( socket2.getOutputStream() );
              out.writeObject("Encontrado");
              out2.println("Encontrado");
              System.out.println("Encontrado, se procede a empezar");
              if (dato.equals("Todos")
                  || dato.equals("Geografía")
                  || dato.equals("Entretenimiento")
                  || dato.equals("Ciencia")
                  || dato.equals("Historia")
                  || dato.equals("Arte")
                  || dato.equals("Deportes")) {
                boolean ya_hay_n = false;
                for (char alphabet = 'a'; alphabet <= 'z'; alphabet++) {

                  if (alphabet == 'o' && ya_hay_n == false) {
                    alphabet--;
                    ya_hay_n = true;
                    Preguntas_Jugador1.add(
                        BaseDeDatosPreguntas.obtenerpreguntasportipo(Tipo_pregunta.Todos, 'ñ'));
                    Preguntas_Jugador2.add(
                        BaseDeDatosPreguntas.obtenerpreguntasportipo(Tipo_pregunta.Todos, 'ñ'));
                  } else {
                    Preguntas_Jugador1.add(
                        BaseDeDatosPreguntas.obtenerpreguntasportipo(
                            Tipo_pregunta.Todos, alphabet));
                    Preguntas_Jugador2.add(
                        BaseDeDatosPreguntas.obtenerpreguntasportipo(
                            Tipo_pregunta.Todos, alphabet));
                  }
                }
                System.out.println("Encontrado emparejamiento");
                out.writeObject("Ok");
                out2.println("Ok");
                out.writeObject("Turno");
                out2.println("No turno");
                System.out.println("Termino con los turnos");
                boolean Rendirse_jugador_1 = false;
                boolean Todas_respondidas_jugador_1 = false;
                boolean Rendirse_jugador_2 = false;
                boolean Todas_respondidas_jugador_2 = false;

                int Preguntas_bien_jugador_1 = 0;
                int Preguntas_mal_jugador1 = 0;
                String Nombre_j1 = in.readLine();

                int Preguntas_bien_jugador_2 = 0;
                String Nombre_j2 = in2.readLine();

                out.writeObject(Nombre_j2);

                out2.println(Nombre_j1);
                int Preguntas_mal_jugador2 = 0;
                System.out.println("Al while");
                char Letra_Actual_J1 = 'a';
                char Letra_Actual_J2 = 'a';
                int Pregunta_j1 = 0;
                int Pregunta_j2 = 0;
                while ((Todas_respondidas_jugador_1 == false && Rendirse_jugador_1 == false)) {
                  System.out.println("Entro al for");

                  for (int i = Pregunta_j1; i < Preguntas_Jugador1.size(); i++) {

                    System.out.println("Entro en el for de j1");
                    if (!Preguntas_Jugador1.get(i).respondida == true) {
                      Letra_Actual_J1 = Preguntas_Jugador1.get(i).letra;
                      dato = in.readLine();
                      if (!dato.equals("OK")) {
                        System.out.println(dato + " dato recivido");
                      }

                      out.writeObject(Preguntas_Jugador1.get(i).Pregunta);

                      out.writeObject(Preguntas_Jugador1.get(i).letra);
                      try {
                        dato = in.readLine();
                      } catch (SocketException a) {
                        dato = "Rendirse";
                      }
                      System.out.println(dato + " respuesta del usuario");
                      if (dato.equals("Pasapalabra")) {

                        out.writeObject("Ok");
                        out2.println("Pasa");
                        in2.readLine();

                      } else if (dato.equals("Rendirse")) {

                        Preguntas_bien_jugador_1 = -1;
                        Rendirse_jugador_1 = true;
                        Rendirse_jugador_2 = true;
                        i = Preguntas_Jugador1.size();
                      } else if (dato.equalsIgnoreCase(Preguntas_Jugador1.get(i).Respuesta)) {

                        Preguntas_bien_jugador_1++;
                        Preguntas_Jugador1.get(i).respondida = true;
                        out.writeObject("Bien");

                        out2.println("J1-Bien");
                        System.out.println("Espero respuesta de j2");
                        in2.readLine();
                        out2.println(Letra_Actual_J1);
                      } else {

                        Preguntas_mal_jugador1++;
                        Preguntas_Jugador1.get(i).respondida = true;
                        out.writeObject("Mal");

                        out2.println("J1-Mal");
                        System.out.println("Espero respuesta de j2");
                        in2.readLine();
                        System.out.println("Respondido");
                        out2.println(Letra_Actual_J1);
                      }

                      Todas_respondidas_jugador_1 = TodasRespondidas(Preguntas_Jugador1);
                    }
                  }
                }
                System.out.println("Salgo del while");
                if (!dato.equals("Rendirse")) {
                  dato = in.readLine();
                  if (!dato.equals("OK")) {
                    System.out.println(dato + " dato recivido");
                  }
                  System.out.println("Fin j1, turno j2");
                  out.writeObject("Fin_J1");
                  out2.println("Fin_J1");
                }
                try {
                  System.out.println("A dormir");
                  Thread.sleep(1000);
                  System.out.println("Fin de dormir");
                  @SuppressWarnings("resource")
                  // TODO: mirar ip
                  Socket socket3 = new Socket("127.0.0.1", 80);

                  OutputStream os2 = socket3.getOutputStream();
                  PrintWriter out3 = new PrintWriter(os2, true);
                  System.out.println("Conexion establecida");

                  BufferedReader in3 =
                      new BufferedReader(new InputStreamReader(socket3.getInputStream()));
                  while (Todas_respondidas_jugador_2 == false && Rendirse_jugador_2 == false) {

                    for (int i = Pregunta_j2; i < Preguntas_Jugador2.size(); i++) {
                      System.out.println("Soy el segundo cliente");

                      System.out.println("Entro en el for de j2");
                      if (!Preguntas_Jugador2.get(i).respondida == true) {
                        System.out.println("Al rollo");

                        out3.println(Preguntas_Jugador2.get(i).Pregunta);

                        out3.println(Preguntas_Jugador2.get(i).letra);

                        dato = in3.readLine();

                        System.out.println(dato + " respuesta del usuario");
                        if (dato.equals("Pasapalabra")) {

                          out3.println("Ok");

                          out.writeObject("Pasa");

                          // TODO: ¿letra?

                        } else if (dato.equals("Rendirse")) {
                          Preguntas_bien_jugador_2 = -1;
                          Rendirse_jugador_2 = true;
                          Rendirse_jugador_1 = true;
                          i = Preguntas_Jugador2.size();
                        } else if (dato.equalsIgnoreCase(Preguntas_Jugador1.get(i).Respuesta)) {

                          Preguntas_bien_jugador_2++;
                          Preguntas_Jugador2.get(i).respondida = true;
                          out3.println("Bien");
                          out.writeObject("J2-Bien");
                          in.readLine();
                          Letra_Actual_J2 = Preguntas_Jugador1.get(i).letra;
                          out.writeObject(Letra_Actual_J2);

                        } else {

                          Preguntas_mal_jugador2++;
                          Preguntas_Jugador2.get(i).respondida = true;
                          out3.println("Mal");
                          out.writeObject("J2-Mal");
                          in.readLine();
                          Letra_Actual_J2 = Preguntas_Jugador1.get(i).letra;
                          out.writeObject(Letra_Actual_J2);
                        }

                        Todas_respondidas_jugador_2 = TodasRespondidas(Preguntas_Jugador2);
                      }
                    }
                  }

                  out.reset();
                  out.writeObject("Fin");
                  out3.println("Fin");
                  System.out.println("Despues de enviar fin, envío las preguntas");
                  out.writeObject(Preguntas_bien_jugador_1);
                  out3.println(Preguntas_bien_jugador_2);
                  System.out.println("Preguntas bien enviadas");
                  out.writeObject(Preguntas_mal_jugador1);
                  out3.println(Preguntas_mal_jugador2);
                  System.out.println("Preguntas mal enviadas");
                } catch (Exception a) {
                  a.printStackTrace();
                }
                if (Preguntas_bien_jugador_1 > Preguntas_bien_jugador_2) {
                  BaseDeDatosUsuarios.Anyadir_registro_partida(Nombre_j1, Nombre_j2, "victoria");
                } else if (Preguntas_bien_jugador_1 < Preguntas_bien_jugador_2) {
                  BaseDeDatosUsuarios.Anyadir_registro_partida(Nombre_j1, Nombre_j2, "derrota");
                } else {
                  BaseDeDatosUsuarios.Anyadir_registro_partida(Nombre_j1, Nombre_j2, "empate");
                }
                addMensaje("Juego acabado");
                socket2.close();

                return;
                // in.readLine();
                // if (!"Ok".equals(dato)) throw new IOException( "Conexión errónea: " + dato );
              } else {
                out.writeObject("Error");
                return;
              }
            }
          case "Imagen":
            addMensaje("Empiezo a recibir la información\n");

            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            try {
              BaseDeDatosUsuarios.cambiarDatosUsuario(
                  Datos_Usuario.get(0), null, null, Datos_Usuario.get(1));
              out.writeObject("OK");
            } catch (Exception a) {
              throw new IOException("Error al meter datos");
            }
            break;
          case "Pass":
            addMensaje("Empiezo a recibir la información\n");
            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            try {
              BaseDeDatosUsuarios.cambiarDatosUsuario(
                  Datos_Usuario.get(0), null, Datos_Usuario.get(1), null);
              out.writeObject("OK");
            } catch (Exception a) {
              throw new IOException("Error al meter datos");
            }

            break;
          case "Mail":
            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            out.writeObject("ACK");
            Datos_Usuario.add(in.readLine());
            try {
              BaseDeDatosUsuarios.cambiarDatosUsuario(
                  Datos_Usuario.get(0), Datos_Usuario.get(1), null, null);
              out.writeObject("OK");
            } catch (Exception a) {
              throw new IOException("Error al meter datos");
            }

            break;

          case "Estadisticas":
            // TODO: terminar esto

            break;
          case "Eliminar":
            addMensaje("Empiezo a recibir la información\n");
            do {

              dato = in.readLine();
              addMensaje("Ha introducido: " + dato + "\n");
              if (!"FIN".equals(dato)) {
                Datos_Usuario.add(dato);
              }
              out.writeObject("ACK");

            } while (!"FIN".equals(dato));
            try {
              BaseDeDatosUsuarios.eliminar_Usuario(Datos_Usuario.get(0), Datos_Usuario.get(2));
              Clientes_conectados.remove(Datos_Usuario.get(0));
              Amigos_usuarios.remove(Datos_Usuario.get(0));
              out.writeObject("BIEN");
              addMensaje("Eliminado con éxito\n");
            } catch (SQLException e) {
              out.writeObject("SQL");
            }
            break;
          case "Delog":
            try {
              dato = in.readLine();
              Clientes_conectados.remove(dato);
              out.writeObject("BIEN");
            } catch (Exception e) {
              out.writeObject("ERROR");
            }
            break;
          case "Amigos":
            dato = in.readLine();
            out.writeObject("ACK");
            String nombre_Usuario = dato;
            if (Amigos_usuarios.get(nombre_Usuario).size() > 0) {

              out.writeObject("OK");
              //						for (int i=0;i<Amigos_usuarios.get(dato).size();i++) {
              //							try{
              //								System.out.println(Amigos_usuarios.get(dato).get(i).Nombre_usuario);
              //
              //	BaseDeDatosUsuarios.nuevoUsuario(Amigos_usuarios.get(dato).get(i).Nombre_usuario,
              // "0", "0", new Date(), "0");
              //
              //	BaseDeDatosUsuarios.eliminar_Usuario(Amigos_usuarios.get(dato).get(i).Nombre_usuario, "0");
              //								Amigos_usuarios.get(dato).remove(i);
              //							}catch(Exception a){
              //								a.printStackTrace();
              //							}
              //						}

              for (int i = 0; i < Amigos_usuarios.get(nombre_Usuario).size(); i++) {
                if (Clientes_conectados.contains(
                    Amigos_usuarios.get(nombre_Usuario).get(i).Nombre_usuario)) {
                  Amigos_usuarios.get(nombre_Usuario).get(i).setEstado_amigo(true);
                } else {
                  Amigos_usuarios.get(nombre_Usuario).get(i).setEstado_amigo(false);
                }
                out.writeObject(Amigos_usuarios.get(nombre_Usuario).get(i).Nombre_usuario);
                out.writeObject(Amigos_usuarios.get(nombre_Usuario).get(i).Solicitud_aceptada);
                out.writeObject(Amigos_usuarios.get(nombre_Usuario).get(i).Solicitud_enviada);
                out.writeObject(Amigos_usuarios.get(nombre_Usuario).get(i).Solicitud_pendiente);
                out.writeObject(Amigos_usuarios.get(nombre_Usuario).get(i).Estado_amigo);
                addMensaje("Le envío: " + Amigos_usuarios.get(nombre_Usuario).get(i) + "\n");
                dato = in.readLine();
                if (!"ACK".equals(dato)) throw new IOException("Conexión errónea: " + dato);
              }
              out.writeObject("FIN");
            } else {
              out.writeObject("NADIE");
            }

            break;
          case "Add_Amigo":
            dato = in.readLine();
            String amigo = "";
            if (Amigos_usuarios.containsKey(dato)) {
              amigo = dato;
              out.writeObject("OK");
              dato = in.readLine();
              if (dato.equals("OK")) {
                // TODO: "enviar" solicitud
                dato = in.readLine();

                try {
                  if (!Amigos_usuarios.get(dato)
                      .contains(new Tipo_Amigo(amigo, false, false, false))) {
                    Amigos_usuarios.get(dato).add(new Tipo_Amigo(amigo, false, true, true));

                    Amigos_usuarios.get(amigo).add(new Tipo_Amigo(dato, false, false, true));
                    out.writeObject("OK");
                  } else {
                    out.writeObject("REPE");
                  }
                } catch (Exception a) {
                  System.out.println("Error");
                  a.printStackTrace();
                }

                // Amigos_usuarios.put(dato, new Tipo_Amigo(dato, false, true, true));

              } else if (dato.equals("NO_OK")) {
                // NADA
              }
            } else {
              out.writeObject("NO_CONTIENE");
            }
            break;
          case "Acept_Amigo":
            dato = in.readLine();
            String amigo2 = dato;

            out.writeObject("OK");
            dato = in.readLine();
            if (dato.equals("OK")) {
              // TODO: "enviar" solicitud
              dato = in.readLine();

              try {

                Amigos_usuarios.get(dato).remove(amigo2);
                Amigos_usuarios.get(amigo2).remove(dato);

                Amigos_usuarios.get(dato).add(new Tipo_Amigo(amigo2, true, false, false));

                Amigos_usuarios.get(amigo2).add(new Tipo_Amigo(dato, true, false, false));

              } catch (Exception a) {
                System.out.println("Error");
                a.printStackTrace();
              }

              // Amigos_usuarios.put(dato, new Tipo_Amigo(dato, false, true, true));
              out.writeObject("OK");
            }

            break;
          case "Delete_Amigo":
            dato = in.readLine();
            String amigo3 = dato;

            out.writeObject("OK");
            dato = in.readLine();
            if (dato.equals("OK")) {
              // TODO: "enviar" solicitud
              dato = in.readLine();

              try {

                Amigos_usuarios.get(dato).remove(amigo3);

                Amigos_usuarios.get(amigo3).remove(dato);

                out.writeObject("OK");

              } catch (Exception a) {
                out.writeObject("NO_CONTIENE");
              }

              // Amigos_usuarios.put(dato, new Tipo_Amigo(dato, false, true, true));

            }

            break;
          case "DeJuego":
            dato = in.readLine();
            System.out.println(dato);
            if (Clientes.contains(dato)) {
              Clientes.remove(0);
            } else {

            }
            break;
          default:
            break;
        }
        //				for (Map.Entry<String,ArrayList<Tipo_Amigo>> entry : Amigos_usuarios.entrySet()) {
        //					String key = entry.getKey();
        //					System.out.println("El usuario "+ key+" tiene: "+entry.getValue().toString());
        //				}
        escribeAFichero();
        //				for (Map.Entry<String,ArrayList<Tipo_Amigo>> entry : Amigos_usuarios.entrySet()) {
        //					String key = entry.getKey();
        //					System.out.println("El usuario "+ key+" tiene: "+entry.getValue().toString());
        //				}
        Datos_Usuario.removeAll(Datos_Usuario);
        out.reset();

        accion = in.readLine();

        if (!"END".equals(accion))
          throw new IOException("Conexión errónea: respuesta  inesperada: " + accion);
        out.writeObject("ACK");

        addMensaje("Conexión finalizada\n");
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        try {
          socket.close();
        } catch (IOException e) {
          System.out.println("Error a la hora de cerrar la conexión con el cliente.");
        }
      }
    }