Search in sources :

Example 6 with User

use of com.gianlu.pyxreborn.Models.User in project PretendYoureXyzzyReborn by devgianlu.

the class ConnectedUsers method checkAndAdd.

/**
 * Adds an user to the server.
 *
 * @param admin if true the user must connect at every cost, even by kicking other players
 */
public User checkAndAdd(String nickname, @Nullable String sid, InetSocketAddress address, boolean admin) throws GeneralException {
    if (size() >= maxUsers) {
        if (admin)
            kickUser(get(new Random().nextInt(size())), KickReason.ADMIN_LOGGED);
        else
            throw new GeneralException(ErrorCodes.TOO_MANY_USERS);
    }
    User alreadyConnectedUser = findByNickname(nickname);
    if (admin && alreadyConnectedUser != null)
        kickUser(alreadyConnectedUser, KickReason.ADMIN_LOGGED);
    if (alreadyConnectedUser != null) {
        if (alreadyConnectedUser.isDisconnected()) {
            if (Objects.equals(alreadyConnectedUser.sessionId, sid)) {
                alreadyConnectedUser.disconnectedAt = -1;
                JsonObject obj = new JsonObject();
                obj.addProperty(Fields.SESSION_ID.toString(), alreadyConnectedUser.sessionId);
                server.sendMessage(alreadyConnectedUser, obj);
                return alreadyConnectedUser;
            } else {
                throw new GeneralException(ErrorCodes.INVALID_SID);
            }
        } else {
            throw new GeneralException(ErrorCodes.NICK_ALREADY_IN_USE);
        }
    }
    if (nickname.isEmpty() || nickname.length() < 5 || (!admin && nickname.equals("xyzzy")))
        throw new GeneralException(ErrorCodes.INVALID_NICKNAME);
    User user = new User(nickname, null, address, admin);
    JsonObject obj = Utils.event(Events.NEW_USER);
    obj.addProperty(Fields.NICKNAME.toString(), nickname);
    // This way we don't send the broadcast to the user itself
    server.broadcastMessage(obj);
    add(user);
    JsonObject obj1 = new JsonObject();
    obj1.addProperty(Fields.SESSION_ID.toString(), user.sessionId);
    server.sendMessage(user, obj1);
    return user;
}
Also used : GeneralException(com.gianlu.pyxreborn.Exceptions.GeneralException) User(com.gianlu.pyxreborn.Models.User) JsonObject(com.google.gson.JsonObject)

Example 7 with User

use of com.gianlu.pyxreborn.Models.User in project PretendYoureXyzzyReborn by devgianlu.

the class Games method kickSpectator.

/**
 * Kicks a spectator from the game.
 */
public void kickSpectator(@NotNull Game game, @NotNull User user, KickReason reason) {
    for (User spectator : game.spectators) {
        if (Objects.equals(spectator, user)) {
            game.spectators.remove(user);
            JsonObject obj = new JsonObject();
            obj.addProperty(Fields.KICKED.toString(), reason.toString());
            server.sendMessage(user, obj);
        }
    }
}
Also used : User(com.gianlu.pyxreborn.Models.User) JsonObject(com.google.gson.JsonObject)

Example 8 with User

use of com.gianlu.pyxreborn.Models.User in project PretendYoureXyzzyReborn by devgianlu.

the class Games method killGame.

/**
 * Kills the game, kicking everyone and deleting the game
 */
@AdminOnly
public void killGame(@NotNull Game game, KickReason majorReason) {
    GameManager manager = managedGames.findGameManagerByGameId(game.gid);
    if (manager != null) {
        try {
            manager.stop();
        } catch (GeneralException ignored) {
        }
    }
    if (!game.players.isEmpty()) {
        for (Player player : game.players) {
            kickPlayer(game, player, majorReason);
        }
    }
    if (!game.spectators.isEmpty()) {
        for (User spectator : game.spectators) {
            kickSpectator(game, spectator, majorReason);
        }
    }
    if (manager != null)
        managedGames.remove(manager);
    remove(game);
    server.broadcastMessage(Utils.event(Events.GAME_REMOVED));
}
Also used : Player(com.gianlu.pyxreborn.Models.Player) GeneralException(com.gianlu.pyxreborn.Exceptions.GeneralException) User(com.gianlu.pyxreborn.Models.User) GameManager(com.gianlu.pyxreborn.server.GameManager) AdminOnly(com.gianlu.pyxreborn.Annotations.AdminOnly)

Aggregations

User (com.gianlu.pyxreborn.Models.User)8 GeneralException (com.gianlu.pyxreborn.Exceptions.GeneralException)5 JsonObject (com.google.gson.JsonObject)3 Player (com.gianlu.pyxreborn.Models.Player)2 JsonElement (com.google.gson.JsonElement)2 AdminOnly (com.gianlu.pyxreborn.Annotations.AdminOnly)1 GameManager (com.gianlu.pyxreborn.server.GameManager)1 JsonArray (com.google.gson.JsonArray)1 ArrayList (java.util.ArrayList)1 InvalidDataException (org.java_websocket.exceptions.InvalidDataException)1 ServerHandshakeBuilder (org.java_websocket.handshake.ServerHandshakeBuilder)1