예제 #1
0
 public static void main(String[] args) {
   // Creo el servidor
   Servidor servidor = new Servidor();
   // Envío 50 peticiones al servidor y finalizo.
   for (int i = 0; i < 50; i++) {
     Tarea tarea = new Tarea("Tarea " + i);
     servidor.ejecutarTarea(tarea);
     try {
       // Cuanto menos esperemos más tareas llegarán a la vez,
       // y el ejecutor creará más hilos y viceversa.
       // Probar con distintos valores de espera.
       Thread.sleep(1000);
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
   }
   // Finalizo el servidor
   servidor.apagarServidor();
 }
예제 #2
0
  public static void Testserver() {
    Servidor s = new Servidor(9999);

    s.ejecutar();
  }
예제 #3
0
  private void processMessage(Object message) {

    if (message instanceof Map) {

      @SuppressWarnings("unchecked")
      Map<String, Object> msg = (Map<String, Object>) message;

      String action = Util.getAction(msg);
      Object parameter = Util.getParameter(msg);

      switch (action) {
        case Acciones.LOGON:
          String login = (String) parameter;

          if (server.existsLogin(login)) {
            msg = Util.prepareMsg(Acciones.LOGON_FAILURE, "login " + login + " en uso.");
            sendMsg(msg);
          } else {
            this.username = login;
            msg = Util.prepareMsg(Acciones.LOGON_SUCESSFUL, null);
            sendMsg(msg);

            msg = Util.prepareMsg(Acciones.MESSAGE, login + " conectado.");
            server.sendMsgToAll(msg);
          }
          break;

        case Acciones.GIVEME_ROOM:
          if (server.getRoomPlayer(username).isGameStarted()
              && server.getRoomPlayer(username).getPlayer(this.username).isToken()) {
            msg = Util.prepareMsg(Acciones.UPDATE_ROOM, server.getRoomPlayer(username));
            sendMsg(msg);
          }

          break;

        case Acciones.UPDATE_ROOM:
          if (parameter instanceof Sala) {
            Sala room = server.getRoomPlayer(username);
            if (room.isGameStarted() && room.getPlayer(this.username).isToken()) {

              room = (Sala) parameter;
              room.next();
              server.setRoom(room);
              msg = Util.prepareMsg(Acciones.UPDATE_ROOM, room);
              server.sendMsgToPlayers(msg, room);
            }
          }

          break;

        case Acciones.DISCONNECT:
          try {
            msg = Util.prepareMsg(Acciones.MESSAGE, this.username + " salir.");
            disconnect();
            server.sendMsgToAll(msg);
          } catch (IOException e) {
            e.printStackTrace();
          }
          break;

        case Acciones.ONLINE_USERS:
          msg = Util.prepareMsg(Acciones.ONLINE_USERS, server.getAllUsersOnline());
          sendMsg(msg);
          break;

        case Acciones.INVITE:
          String user = (String) parameter;

          if (server.getUsersOnline().contains(user) && !server.getUsersInRoom().contains(user)) {

            Conexion recptorConnection = server.getConnection(user);
            if (recptorConnection != null) {

              if (!recptorConnection.isAcceptedInvite()) {
                Invitacion invite = server.getInvite(username, user);

                if (invite == null) {

                  invite = new Invitacion(username, user);

                  server.addInvite(invite);
                  recptorConnection.sendMsg(Util.prepareMsg(Acciones.INVITE, invite));

                  sendMsg(
                      Util.prepareMsg(Acciones.STATUS_INVITE, server.getInvitesIssuing(username)));
                } else {
                  sendMsg(
                      Util.prepareMsg(
                          Acciones.MESSAGE, "Hay una invitacion para el usuario " + user));
                }
              } else {
                sendMsg(Util.prepareMsg(Acciones.MESSAGE, "El usuario ha sido invitado"));
              }
            } else {
              sendMsg(Util.prepareMsg(Acciones.MESSAGE, "Receptor no encontrado"));
            }

          } else {
            msg = Util.prepareMsg(Acciones.MESSAGE, user + " ya esta jugando.");
            sendMsg(msg);
          }
          break;

        case Acciones.RESPONSE_INVITE:
          Invitacion responseInvite = (Invitacion) parameter;
          Invitacion serverInvite =
              server.getInvite(responseInvite.getIssuing(), responseInvite.getReceptor());
          if (serverInvite != null) {
            serverInvite.setStatus(responseInvite.getStatus());
            if (serverInvite.getStatus().equals(Invitacion.ACEPTADO) && !isAcceptedInvite()) {
              setAcceptedInvite(true);
            }
          }

          Conexion issuingConnection = server.getConnection(responseInvite.getIssuing());
          List<Invitacion> invites = server.getInvitesIssuing(responseInvite.getIssuing());
          issuingConnection.sendMsg(Util.prepareMsg(Acciones.STATUS_INVITE, invites));

          break;

        case Acciones.CHAT_MESSAGE:
          String chatMsg = (String) parameter;
          server.sendMsgToAll(Util.prepareMsg(Acciones.CHAT_MESSAGE, username + "> " + chatMsg));
          break;

        case Acciones.START_GAME:
          List<String> usernamePlayers = (List<String>) parameter;

          if (server.startGame(usernamePlayers)) {
            msg = Util.prepareMsg(Acciones.MESSAGE, "El juego inicio");
            server.sendMsgToPlayers(msg, server.getRoomPlayer(username));
          }

          break;

        default:
          break;
      }
    }
  }