Lobbyst väljumine

Lobbist väljumise implementatsioon on peaaegu sama nagu lobbi loomine

images/valju.png

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.