Search in sources :

Example 1 with User

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

the class BaseHandlerWithUser method handleRequest.

@Override
public final JsonObject handleRequest(Server server, JsonObject request, JsonObject response) throws GeneralException {
    JsonElement sid = request.get(Fields.SESSION_ID.toString());
    if (sid == null)
        throw new GeneralException(ErrorCodes.INVALID_REQUEST);
    User user = server.users.findBySessionId(sid.getAsString());
    if (user == null)
        throw new GeneralException(ErrorCodes.NOT_CONNECTED);
    return handleRequest(server, user, request, response);
}
Also used : GeneralException(com.gianlu.pyxreborn.Exceptions.GeneralException) User(com.gianlu.pyxreborn.Models.User) JsonElement(com.google.gson.JsonElement)

Example 2 with User

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

the class KickUserHandler method handleRequestForAdmin.

@Override
public JsonObject handleRequestForAdmin(Server server, @NotNull User user, JsonObject request, JsonObject response) throws GeneralException {
    JsonElement reason = request.get(Fields.KICK_REASON.toString());
    JsonElement nickname = request.get(Fields.NICKNAME.toString());
    if (nickname == null)
        throw new GeneralException(ErrorCodes.INVALID_REQUEST);
    User kickUser = server.users.findByNickname(nickname.getAsString());
    if (kickUser == null)
        throw new GeneralException(ErrorCodes.INVALID_NICKNAME);
    server.users.kickUser(kickUser, reason == null ? null : KickReason.parse(reason.getAsString()));
    return successful(response);
}
Also used : GeneralException(com.gianlu.pyxreborn.Exceptions.GeneralException) User(com.gianlu.pyxreborn.Models.User) JsonElement(com.google.gson.JsonElement)

Example 3 with User

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

the class Games method leaveGame.

/**
 * Removes a player or a spectator from the game.
 */
public void leaveGame(@NotNull Game game, @NotNull User user) {
    for (Player player : new ArrayList<>(game.players)) {
        if (Objects.equals(player.user, user)) {
            game.players.remove(player);
            JsonObject obj = Utils.event(Events.GAME_PLAYER_LEFT);
            obj.addProperty(Fields.NICKNAME.toString(), user.nickname);
            // Don't broadcast this to the player itself
            server.broadcastMessageToPlayers(game, obj);
            if (user == game.host && !game.players.isEmpty())
                game.host = game.players.get(0).user;
            if (game.players.isEmpty())
                killGame(game, KickReason.GAME_EMPTY);
            return;
        }
    }
    for (User spectator : new ArrayList<>(game.spectators)) {
        if (Objects.equals(spectator, user)) {
            game.spectators.remove(spectator);
            JsonObject obj = Utils.event(Events.GAME_SPECTATOR_LEFT);
            obj.addProperty(Fields.NICKNAME.toString(), user.nickname);
            // Don't broadcast this to the user itself
            server.broadcastMessageToPlayers(game, obj);
            return;
        }
    }
}
Also used : Player(com.gianlu.pyxreborn.Models.Player) User(com.gianlu.pyxreborn.Models.User) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject)

Example 4 with User

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

the class PyxServerAdapter method onWebsocketHandshakeReceivedAsServer.

/**
 * This method takes care of validating the client handshake.
 * The handshake must contains a nickname. Optionally, an admin code can be sent to login as admin.
 * <p>
 * To resume a previous session a session ID can be sent. See {@link ConnectedUsers#removeUser(User, boolean)}.
 */
@Override
public ServerHandshakeBuilder onWebsocketHandshakeReceivedAsServer(WebSocket conn, Draft draft, ClientHandshake request) throws InvalidDataException {
    ServerHandshakeBuilder builder = super.onWebsocketHandshakeReceivedAsServer(conn, draft, request);
    if (request.hasFieldValue(Fields.NICKNAME.toString())) {
        boolean admin = false;
        if (request.hasFieldValue(Fields.ADMIN_CODE.toString())) {
            String code = request.getFieldValue(Fields.ADMIN_CODE.toString());
            if (Objects.equals(code, currentAdminCode)) {
                admin = true;
            } else {
                throw new InvalidDataException(CloseFrame.POLICY_VALIDATION, ErrorCodes.INVALID_ADMIN_CODE.toString());
            }
        }
        try {
            User user = users.checkAndAdd(request.getFieldValue(Fields.NICKNAME.toString()), request.getFieldValue(Fields.SESSION_ID.toString()), conn.getRemoteSocketAddress(), admin);
            builder.put(Fields.SESSION_ID.toString(), user.sessionId);
        } catch (GeneralException ex) {
            throw new InvalidDataException(CloseFrame.POLICY_VALIDATION, ex.code.toString());
        }
    } else {
        throw new InvalidDataException(CloseFrame.POLICY_VALIDATION, ErrorCodes.INVALID_REQUEST.toString());
    }
    return builder;
}
Also used : User(com.gianlu.pyxreborn.Models.User) GeneralException(com.gianlu.pyxreborn.Exceptions.GeneralException) InvalidDataException(org.java_websocket.exceptions.InvalidDataException) ServerHandshakeBuilder(org.java_websocket.handshake.ServerHandshakeBuilder)

Example 5 with User

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

the class ListUsersHandler method handleRequest.

@Override
public JsonObject handleRequest(Server server, JsonObject request, JsonObject response) throws GeneralException {
    JsonArray list = new JsonArray();
    for (User user : server.users) list.add(user.toJson());
    response.add(Fields.USERS_LIST.toString(), list);
    response.addProperty(Fields.MAX_USERS.toString(), server.users.getMax());
    return response;
}
Also used : JsonArray(com.google.gson.JsonArray) User(com.gianlu.pyxreborn.Models.User)

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