Exemplo n.º 1
0
  /**
   * Logs in or registers a player. Called by the message receiver thread.
   *
   * @param webSocket
   * @throws IOException
   * @throws UnknownMesgEx
   * @return The logged in player, or null on failure.
   * @author Tiberiu Pasat
   * @author Paul Nechifor
   */
  public Player loginOrRegister(WebSocket webSocket) throws IOException, UnknownMesgEx {
    LoginOrRegisterFrom lor = (LoginOrRegisterFrom) MesgFrom.read(webSocket);
    LoginOrRegisterTo resp = new LoginOrRegisterTo();
    resp.accepted = false;
    Player player = null;
    String reason = getReasonForInvalid(lor.name, lor.password);
    if (reason == null) {
      if (lor.register) {
        synchronized (players) {
          try {
            player = new Player(lor.name, this, webSocket, lor.password);
            PlayerManager.persist(player);
            resp.accepted = true;
            players.put(player.getId(), player);
            heroes.put(player.getId(), player);
          } catch (Exception ex) {
            ex.printStackTrace();
            resp.message = ex.getMessage();
          }
        }
      } else {
        synchronized (players) {
          player = new Player(lor.name, this, webSocket, lor.password);
          // then fill it from database if exists
          try {
            PlayerManager.fillByUsernameAndPassword(player);
            if (players.containsKey(player.getId()))
              throw new Exception("Account already logged in");
            players.put(player.getId(), player);
            heroes.put(player.getId(), player);
            resp.accepted = true;
          } catch (Exception e) {
            // if not exists will be thrown an error so we don't
            // accept him
            e.printStackTrace();
            player = null;
            resp.message = e.getMessage();
          }
        }
      }
    } else {
      resp.message = reason;
    }

    if (resp.accepted) {
      resp.info = new LoginInfo(player);
    }

    resp.write(webSocket);

    if (resp.accepted) {
      return player; // Return the player (i.e. success).
    }

    return null; // Return failure.
  }
Exemplo n.º 2
0
  /** @deprecated & not functional anymore.. */
  public Player loginOrRegister_legacy(WebSocket webSocket) throws IOException, UnknownMesgEx {
    LoginOrRegisterFrom lor = (LoginOrRegisterFrom) MesgFrom.read(webSocket);
    LoginOrRegisterTo resp = new LoginOrRegisterTo();
    resp.accepted = false;
    Player player = null;

    if (lor.register) {
      synchronized (players) {
        // Check if the name doesn't already exist.
        if (players.containsKey(lor.name)) {
          // resp.exists = true;
        } else {
          resp.accepted = true;
        }

        // Add the player if it's okay.
        if (resp.accepted) {
          player = new Player(lor.name, this, webSocket, lor.password);
          if (lor.name.startsWith("Bot"))
            player.setLocation(new Random().nextInt(6000), new Random().nextInt(6000), false, 0);
          players.put(player.getId(), player);
          heroes.put(player.getId(), player);
        }
      }
    } else {
      synchronized (players) {
        // Check if the user exits, if the password is correct and if
        // he isn't already logged in.
        player = players.get(lor.name);
        if (player != null && player.isCorrectPassword(lor.password) && !player.isLoggedIn()) {
          resp.accepted = true;
        }
      }
    }

    if (resp.accepted) {
      resp.info = new LoginInfo(player);
    }

    resp.write(webSocket);

    if (resp.accepted) {
      return player; // Return the player (i.e. success).
    }

    return null; // Return failure.
  }