Lobbyst väljumine¶
Lobbist väljumise implementatsioon on peaaegu sama nagu lobbi loomine
Töötle nuppu vajutamist¶
LobbyScreen.java
@Override
protected void createInterface() {
...
TextButton backButton = new TextButton("", skin);
backButton.addListener(new LeaveLobbyClickListener(lobby.getId()));
...
}
LeaveLobbyClickListener.java
@AllArgsConstructor
public class LeaveLobbyClickListener extends ClickListener {
private int id;
@Override
public void clicked(InputEvent event, float x, float y) {
ClientLauncher.getInstance().sendUDP(new LeaveLobbyPacket(id));
}
}
Töötle nuppu vajutamist¶
Main.java
public void removePlayer(int id) {
currentLobby = null;
Gdx.app.postRunnable(new SetScreenRunnable(new LobbiesListScreen()));
}
Päringu töötlemine serveris¶
ServerListener.java
@Override
public void received(Connection connection, Object object) {
switch (object) {
...
case LeaveLobbyPacket packet ->
ServerLauncher.getInstance().getGame().leaveLobby(connection.getID(), packet.getId());
...
}
}
Game.java
public void leaveLobby(int playerId, int lobbyId) {
Lobby lobby = lobbies.get(lobbyId);
lobby.kickPlayer(playerId);
if (lobby.getPlayersNumber() == 0) {
lobbies.remove(lobbyId);
}
ServerLauncher.getInstance().sendToUDP(playerId, new LeaveLobbyPacket(playerId));
}
Lobbi klassi värskendamine¶
Lobby.java
public void kickPlayer(int playerId) {
players.remove(playerId);
}
public int getPlayersNumber() {
return players.keySet().size();
}
*See pole kohustuslik, et saata midagi tagasi kliendile, sest lobbi väljumist me saame töötelda ka kliendis.