refactor: formated UserManager properly

This commit is contained in:
Yannik Bretschneider 2021-06-07 01:56:08 +02:00
parent 274a85248f
commit c24121b6d9

View File

@ -16,10 +16,10 @@ import org.java_websocket.WebSocket;
import java.util.*; import java.util.*;
/** Class that manages users. It is meant as an extension to the {@link MarvelousServer} class. This is the first /**
* place where messages are relayed to after they get received. This class is * Class that manages users. It is meant as an extension to the {@link MarvelousServer} class. This is the first place
* responsible for handshakes, reconnects and WebSocket-to-Participant matching. * where messages are relayed to after they get received. This class is responsible for handshakes, reconnects and
* It is designed to be thread-safe. The Singleton of this class also contains a * WebSocket-to-Participant matching. It is designed to be thread-safe. The Singleton of this class also contains a
* {@link LobbyManager}, which manages the lobbys. * {@link LobbyManager}, which manages the lobbys.
*/ */
public class UserManager { public class UserManager {
@ -37,8 +37,10 @@ public class UserManager {
return instance; return instance;
} }
/** The {@link LobbyManager} associated with the {@link UserManager}. It is therefore a kind of extension /**
* to the current singleton, and may of course not be called from anywhere else */ * The {@link LobbyManager} associated with the {@link UserManager}. It is therefore a kind of extension to the
* current singleton, and may of course not be called from anywhere else
*/
private final LobbyManager lobbyManager; private final LobbyManager lobbyManager;
/** A set of users that aren't assigned to lobbies or character selection yet */ /** A set of users that aren't assigned to lobbies or character selection yet */
@ -47,9 +49,9 @@ public class UserManager {
/** A set of users that can reconnect if they wish to do so, and their matching Participants */ /** A set of users that can reconnect if they wish to do so, and their matching Participants */
private final HashMap<WebSocket, SUID> readyToReconnect; private final HashMap<WebSocket, SUID> readyToReconnect;
/** A set of users that only have to send the /**
* {@link uulm.teamname.marvelous.gamelibrary.messages.client.PlayerReadyMessage} to be assigned * A set of users that only have to send the {@link uulm.teamname.marvelous.gamelibrary.messages.client.PlayerReadyMessage}
* to a lobby, containing WebSockets mapped to their user's usernames * to be assigned to a lobby, containing WebSockets mapped to their user's usernames
*/ */
private final HashMap<WebSocket, SUID> readyToConnect; private final HashMap<WebSocket, SUID> readyToConnect;
@ -88,9 +90,10 @@ public class UserManager {
} }
/** /**
* Called on any received messages. The method checks the message for validity, and then relays it * Called on any received messages. The method checks the message for validity, and then relays it accordingly.
* accordingly. {@link HelloServerMessage HelloServerMessages} and {@link ReconnectMessage ReconnectMessages} * {@link HelloServerMessage HelloServerMessages} and {@link ReconnectMessage ReconnectMessages} are handled in this
* are handled in this component, whereby a handshake or reconnect is performed, respectively. * component, whereby a handshake or reconnect is performed, respectively.
*
* @param conn is the {@link WebSocket} that sent the message * @param conn is the {@link WebSocket} that sent the message
* @param message is the {@link String} sent by the connection * @param message is the {@link String} sent by the connection
*/ */
@ -271,6 +274,7 @@ public class UserManager {
/** /**
* Method to call when removing a user from the game, e.g. on player timeout, or end of match * Method to call when removing a user from the game, e.g. on player timeout, or end of match
*
* @param conn is the connection to close * @param conn is the connection to close
*/ */
public void removeUser(WebSocket conn) { public void removeUser(WebSocket conn) {
@ -291,11 +295,7 @@ public class UserManager {
} }
} }
/** /** Method called exclusively from {@link MarvelousServer} on closed connection. */
* Method called exclusively from {@link MarvelousServer} on closed connection.
* @param conn
* @param closedByRemote
*/
void disconnectUser(WebSocket conn, boolean closedByRemote) { void disconnectUser(WebSocket conn, boolean closedByRemote) {
// TODO: notify clients and such if the connection was in fact closed by the remote. Also remove participant // TODO: notify clients and such if the connection was in fact closed by the remote. Also remove participant
synchronized (newUsers) { synchronized (newUsers) {
@ -308,6 +308,7 @@ public class UserManager {
readyToReconnect.remove(conn); readyToReconnect.remove(conn);
} }
synchronized (inGame) { synchronized (inGame) {
if (inGame.containsKey(conn)) inGame.get(conn).clearConnection();
inGame.remove(conn); inGame.remove(conn);
} }
} }