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;
}
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);
}
}
}
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));
}
Aggregations