refactor: formated lobbymanager properly
This commit is contained in:
parent
16c425c507
commit
752f43b86f
@ -201,8 +201,7 @@ public class LobbyConnection implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tries to read the next message in the messageQueue. waits for timeoutMillis
|
* Tries to read the next message in the messageQueue. waits for timeoutMillis for a queue item
|
||||||
* for a queue item
|
|
||||||
*
|
*
|
||||||
* @param timeoutMillis is the amount of time the method waits until continuing even though not being notified.
|
* @param timeoutMillis is the amount of time the method waits until continuing even though not being notified.
|
||||||
*/
|
*/
|
||||||
@ -504,7 +503,7 @@ public class LobbyConnection implements Runnable {
|
|||||||
|
|
||||||
public void broadcastEvents(Event... events) {
|
public void broadcastEvents(Event... events) {
|
||||||
Logger.trace("Broadcasting {} events to all participants", events.length);
|
Logger.trace("Broadcasting {} events to all participants", events.length);
|
||||||
var message = new EventMessage();
|
var message = new EventMessage();
|
||||||
message.messages = events;
|
message.messages = events;
|
||||||
|
|
||||||
broadcast(message);
|
broadcast(message);
|
||||||
|
@ -8,7 +8,6 @@ import uulm.teamname.marvelous.gamelibrary.messages.RoleEnum;
|
|||||||
import uulm.teamname.marvelous.gamelibrary.messages.client.CharacterSelectionMessage;
|
import uulm.teamname.marvelous.gamelibrary.messages.client.CharacterSelectionMessage;
|
||||||
import uulm.teamname.marvelous.gamelibrary.messages.client.PlayerReadyMessage;
|
import uulm.teamname.marvelous.gamelibrary.messages.client.PlayerReadyMessage;
|
||||||
import uulm.teamname.marvelous.gamelibrary.messages.client.RequestMessage;
|
import uulm.teamname.marvelous.gamelibrary.messages.client.RequestMessage;
|
||||||
import uulm.teamname.marvelous.gamelibrary.messages.server.EventMessage;
|
|
||||||
import uulm.teamname.marvelous.server.lobby.Lobby;
|
import uulm.teamname.marvelous.server.lobby.Lobby;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -18,9 +17,9 @@ import java.util.function.BiConsumer;
|
|||||||
public class LobbyManager {
|
public class LobbyManager {
|
||||||
private final HashMap<Participant, LobbyConnection> lobbies;
|
private final HashMap<Participant, LobbyConnection> lobbies;
|
||||||
private final HashMap<String, LobbyConnection> resourceDescriptorToLobby;
|
private final HashMap<String, LobbyConnection> resourceDescriptorToLobby;
|
||||||
private String localResourceDescriptor;
|
|
||||||
private final BiConsumer<WebSocket, BasicMessage> sendMessageCallback;
|
private final BiConsumer<WebSocket, BasicMessage> sendMessageCallback;
|
||||||
private final BiConsumer<WebSocket, String> sendErrorCallback;
|
private final BiConsumer<WebSocket, String> sendErrorCallback;
|
||||||
|
private String localResourceDescriptor;
|
||||||
|
|
||||||
public LobbyManager(BiConsumer<WebSocket, BasicMessage> sendMessageCallback,
|
public LobbyManager(BiConsumer<WebSocket, BasicMessage> sendMessageCallback,
|
||||||
BiConsumer<WebSocket, String> sendErrorCallback) {
|
BiConsumer<WebSocket, String> sendErrorCallback) {
|
||||||
@ -31,12 +30,13 @@ public class LobbyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assigns a lobby to the given participant. If there are no lobbies available, a new lobby will be created.
|
* Assigns a lobby to the given participant. If there are no lobbies available, a new lobby will be created. The
|
||||||
* The {@link WebSocket#getResourceDescriptor() ResourceDescriptor} is hereby preferred as the LobbyID, whereby
|
* {@link WebSocket#getResourceDescriptor() ResourceDescriptor} is hereby preferred as the LobbyID, whereby
|
||||||
* spectators are always assigned to the lobby specified in said resourceDescriptor while players are connected
|
* spectators are always assigned to the lobby specified in said resourceDescriptor while players are connected to a
|
||||||
* to a lobby with a similar resourceDescriptor if the lobby they requested is already full
|
* lobby with a similar resourceDescriptor if the lobby they requested is already full
|
||||||
|
*
|
||||||
* @param playerName is the name of the player be assigned to a lobby
|
* @param playerName is the name of the player be assigned to a lobby
|
||||||
* @param message is the {@link PlayerReadyMessage} sent by the participant that triggered the LobbyAssignment
|
* @param message is the {@link PlayerReadyMessage} sent by the participant that triggered the LobbyAssignment
|
||||||
* @return the {@link Participant} that was actually assigned to the lobby
|
* @return the {@link Participant} that was actually assigned to the lobby
|
||||||
*/
|
*/
|
||||||
public Participant assignLobbyToConnection(WebSocket connection, String playerName, PlayerReadyMessage message) {
|
public Participant assignLobbyToConnection(WebSocket connection, String playerName, PlayerReadyMessage message) {
|
||||||
@ -140,14 +140,15 @@ public class LobbyManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes a new {@link LobbyConnection} with a not yet initialized {@link Lobby}. The {@link LobbyConnection}
|
* Initializes a new {@link LobbyConnection} with a not yet initialized {@link Lobby}. The {@link LobbyConnection}
|
||||||
* gets some GameID, and also the sendMessageCallback and sendErrorCallback from the
|
* gets some GameID, and also the sendMessageCallback and sendErrorCallback from the {@link
|
||||||
* {@link uulm.teamname.marvelous.server.netconnector.UserManager}.
|
* uulm.teamname.marvelous.server.netconnector.UserManager}.
|
||||||
* @param gameID is the ID that the {@link LobbyConnection} is initialized with. This is normally
|
*
|
||||||
* the resourceDescriptor.
|
* @param gameID is the ID that the {@link LobbyConnection} is initialized with. This is normally the
|
||||||
|
* resourceDescriptor.
|
||||||
* @return the newly initialized LobbyConnection
|
* @return the newly initialized LobbyConnection
|
||||||
*/
|
*/
|
||||||
private LobbyConnection initializeNewLobby(String gameID) {
|
private LobbyConnection initializeNewLobby(String gameID) {
|
||||||
var lobby = new LobbyConnection(gameID, sendMessageCallback, sendErrorCallback);
|
var lobby = new LobbyConnection(gameID, sendMessageCallback, sendErrorCallback);
|
||||||
Logger.debug("Adding mapping from gameID (resourceDescriptor) '{}' to new lobby...", gameID);
|
Logger.debug("Adding mapping from gameID (resourceDescriptor) '{}' to new lobby...", gameID);
|
||||||
synchronized (resourceDescriptorToLobby) {
|
synchronized (resourceDescriptorToLobby) {
|
||||||
resourceDescriptorToLobby.put(gameID, lobby);
|
resourceDescriptorToLobby.put(gameID, lobby);
|
||||||
@ -156,8 +157,8 @@ public class LobbyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the local resource descriptor if it is pointing to a not yet filled lobby (joinable lobby), or
|
* Returns the local resource descriptor if it is pointing to a not yet filled lobby (joinable lobby), or generates
|
||||||
* generates a new one if the lobby described by the resourceDescriptor is full already
|
* a new one if the lobby described by the resourceDescriptor is full already
|
||||||
*/
|
*/
|
||||||
private String getLocalResourceDescriptor() {
|
private String getLocalResourceDescriptor() {
|
||||||
Logger.trace("Getting local resourceDescriptor. Currently this is '{}'", localResourceDescriptor);
|
Logger.trace("Getting local resourceDescriptor. Currently this is '{}'", localResourceDescriptor);
|
||||||
@ -195,8 +196,8 @@ public class LobbyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A method to obtain the resourceDescriptorToLobby HashMap.
|
* A method to obtain the resourceDescriptorToLobby HashMap. Meant for testing, and shouldn't be used anywhere
|
||||||
* Meant for testing, and shouldn't be used anywhere else.
|
* else.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
Map<String, LobbyConnection> getResourceDescriptorToLobby() {
|
Map<String, LobbyConnection> getResourceDescriptorToLobby() {
|
||||||
|
@ -2,16 +2,8 @@ package uulm.teamname.marvelous.server.lobbymanager;
|
|||||||
|
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
import uulm.teamname.marvelous.server.Server;
|
import uulm.teamname.marvelous.server.Server;
|
||||||
import uulm.teamname.marvelous.server.lobby.Lobby;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class meant for running lobbies. It manages said lobbys, creates threads for it, and moves it into an executor
|
* Class meant for running lobbies. It manages said lobbys, creates threads for it, and moves it into an executor
|
||||||
@ -19,17 +11,9 @@ import java.util.concurrent.TimeUnit;
|
|||||||
public class LobbyRunner {
|
public class LobbyRunner {
|
||||||
|
|
||||||
private static LobbyRunner instance;
|
private static LobbyRunner instance;
|
||||||
|
|
||||||
static LobbyRunner getInstance() {
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new LobbyRunner();
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private final HashMap<LobbyConnection, Thread> activeLobbies;
|
private final HashMap<LobbyConnection, Thread> activeLobbies;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new LobbyRunner
|
* Constructs a new LobbyRunner
|
||||||
*/
|
*/
|
||||||
@ -37,6 +21,13 @@ public class LobbyRunner {
|
|||||||
this.activeLobbies = new HashMap<>();
|
this.activeLobbies = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LobbyRunner getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new LobbyRunner();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
boolean canAddLobby() {
|
boolean canAddLobby() {
|
||||||
return activeLobbies.size() < Server.getMaxLobbies();
|
return activeLobbies.size() < Server.getMaxLobbies();
|
||||||
}
|
}
|
||||||
|
@ -8,20 +8,21 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class Participant {
|
public class Participant {
|
||||||
|
|
||||||
/** The Websocket to contact the participant with */
|
|
||||||
private WebSocket connection;
|
|
||||||
|
|
||||||
/** The ID of the device that the client provided at connect */
|
/** The ID of the device that the client provided at connect */
|
||||||
public final String deviceID;
|
public final String deviceID;
|
||||||
|
|
||||||
public final String name;
|
public final String name;
|
||||||
|
|
||||||
/** The type (as in role) of participant */
|
/** The type (as in role) of participant */
|
||||||
public final ParticipantType type;
|
public final ParticipantType type;
|
||||||
|
|
||||||
|
/** Persistent HashCode over the lifetime of the Participant */
|
||||||
|
Integer hashCode;
|
||||||
|
|
||||||
/* Whether the participant is an AI */
|
/* Whether the participant is an AI */
|
||||||
// public final boolean AI;
|
// public final boolean AI;
|
||||||
|
|
||||||
|
/** The Websocket to contact the participant with */
|
||||||
|
private WebSocket connection;
|
||||||
|
|
||||||
/** Creates a new {@link Participant} */
|
/** Creates a new {@link Participant} */
|
||||||
public Participant(WebSocket connection, ParticipantType type, String deviceID, String name) {
|
public Participant(WebSocket connection, ParticipantType type, String deviceID, String name) {
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
@ -58,7 +59,6 @@ public class Participant {
|
|||||||
this.connection = null;
|
this.connection = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
@ -67,8 +67,6 @@ public class Participant {
|
|||||||
return Objects.equals(connection, that.connection) && Objects.equals(deviceID, that.deviceID) && Objects.equals(name, that.name) && type == that.type;
|
return Objects.equals(connection, that.connection) && Objects.equals(deviceID, that.deviceID) && Objects.equals(name, that.name) && type == that.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
Integer hashCode;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
if (hashCode == null) hashCode = Objects.hash(connection, deviceID, name, type);
|
if (hashCode == null) hashCode = Objects.hash(connection, deviceID, name, type);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package uulm.teamname.marvelous.server.lobbymanager;
|
package uulm.teamname.marvelous.server.lobbymanager;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class RandomWordGenerator {
|
public class RandomWordGenerator {
|
||||||
@ -18,11 +17,10 @@ public class RandomWordGenerator {
|
|||||||
firstWord = firstWord.substring(0, 1).toUpperCase() + firstWord.substring(1).toLowerCase();
|
firstWord = firstWord.substring(0, 1).toUpperCase() + firstWord.substring(1).toLowerCase();
|
||||||
secondWord = secondWord.substring(0, 1).toUpperCase() + secondWord.substring(1).toLowerCase();
|
secondWord = secondWord.substring(0, 1).toUpperCase() + secondWord.substring(1).toLowerCase();
|
||||||
return firstWord + secondWord;
|
return firstWord + secondWord;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static final String[] randomWords = new String[] {
|
private static final String[] randomWords = new String[]{
|
||||||
"wait",
|
"wait",
|
||||||
"release",
|
"release",
|
||||||
"river",
|
"river",
|
||||||
|
Loading…
Reference in New Issue
Block a user