Uue lobby loomine¶
Järgmiseks etappiks realiseerime lobbide loomine.
Lisa lobby class¶
Loo lobby klass shared kaustas.
Lobby.java
@Getter
@NoArgsConstructor
public class Lobby {
private static int nextId = 0;
private int id;
private String name;
private Map<Integer, Player> players;
public Lobby(Player player) {
this.id = nextId++;
this.name = generateLobbyName(player);
this.players = new HashMap<>();
joinLobby(player);
}
public void joinLobby(Player player) {
players.put(player.getId(), player);
}
private String generateLobbyName(Player player) {
return String.format("%s's lobby", player.getName());
}
}
Töötle nupu vajutamist¶
LobbiesListScreen.java
@Override
protected void createInterface() {
...
TextButton addLobbyButton = new TextButton("Add Lobby", skin);
addLobbyButton.addListener(new CreateLobbyClickListener());
...
}
CreateLobbyClickListener.java
public class CreateLobbyClickListener extends ClickListener {
@Override
public void clicked(InputEvent event, float x, float y) {
ClientLauncher.getInstance().sendUDP(new CreateLobbyPacket());
}
}
Saadame lihtsalt tühja CreateLobbyPacket, sest meile polegi midagi vaja välja arvatud mängija ID, mida me saame koos päringuga vaikimisi.
CreateLobbyPacket.java
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class CreateLobbyPacket {
private Lobby lobby;
}
*Hoiame lobby muutuja vastuseks serverilt. Kuid päringuks saadame tühja paketti
Päringu töötlemine serveris¶
ServerListener.java
@Override
public void received(Connection connection, Object object) {
switch (object) {
...
case CreateLobbyPacket packet ->
ServerLauncher.getInstance().getGame().createLobby(connection.getID());
...
}
}
Lisame uue kujutise lobbideks, et hoida neid serveril.
Game.java
private Map<Integer, Lobby> lobbies = new HashMap<>();
public void createLobby(int id) {
Player player = players.get(id);
Lobby lobby = new Lobby(player);
lobbies.put(lobby.getId(), lobby);
ServerLauncher.getInstance().sendToUDP(id, new CreateLobbyPacket(lobby));
}
Vastuse töötlemine kliendis¶
ClientListener.java
@Override
public void received(Connection connection, Object object) {
switch (object) {
...
case CreateLobbyPacket packet ->
Main.getInstance().joinLobby(Main.getInstance().getCurrentPlayer(), packet.getLobby());
...
}
}
Main.java
public void joinLobby(Lobby lobby) {
currentLobby = lobby;
Gdx.app.postRunnable(new SetScreenRunnable(new LobbyScreen(currentLobby)));
}