Files
Sudoku/app/src/main/java/network/client/ClientConnexion.java
Persson-dev 25c2270a37
All checks were successful
Linux arm64 / Build (push) Successful in 31s
feat: multi synced player scores
2025-01-30 22:16:29 +01:00

99 lines
2.8 KiB
Java

package network.client;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import game.Player;
import network.Connexion;
import network.protocol.packets.ChangeCellPacket;
import network.protocol.packets.ConnexionInfoPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.EndGamePacket;
import network.protocol.packets.KeepAlivePacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.PlayerJoinPacket;
import network.protocol.packets.PlayerLeavePacket;
import network.protocol.packets.StartGamePacket;
import network.protocol.packets.UpdatePlayerScorePacket;
import sudoku.io.SudokuSerializer;
public class ClientConnexion extends Connexion {
private final Client client;
private Player player = null;
public ClientConnexion(String address, short port, Client client) throws UnknownHostException, IOException {
super(new Socket(address, port));
this.client = client;
}
@Override
public void close() {
if (!this.isClosed()) {
super.close();
client.onDisconnect.emit();
}
}
@Override
public void visitPacket(ConnexionInfoPacket packet) {
this.player = this.client.getGame().getPlayerById(packet.getConnectionId());
client.onConnect.emit();
}
@Override
public void visitPacket(KeepAlivePacket packet) {
// we just send the packet back to the server
sendPacket(packet);
}
@Override
public void visitPacket(DisconnectPacket packet) {
this.client.disconnectReason = packet.getReason();
close();
}
@Override
public void visitPacket(LoginPacket packet) {
throw new UnsupportedOperationException("Unimplemented method 'visitPacketLogin'");
}
@Override
public void visitPacket(PlayerJoinPacket packet) {
this.client.addPlayer(packet.getPlayer());
System.out.println("[Client] " + packet.getPlayer().getPseudo() + " joined the game !");
}
@Override
public void visitPacket(PlayerLeavePacket packet) {
this.client.getGame().removePlayer(packet.getPlayer());
}
@Override
public void visitPacket(StartGamePacket packet) {
this.client.getGame().startGame(SudokuSerializer.deserializeSudoku(packet.getSerializedSudoku()));
this.client.onGameStarted.emit();
}
@Override
public void visitPacket(EndGamePacket packet) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
@Override
public void visitPacket(UpdatePlayerScorePacket packet) {
Player player = this.client.getGame().getPlayerById(packet.getPlayerId());
assert(player != null);
player.setScore(packet.getCellsLeft());
System.out.println("Score for " + player.getPseudo() + " : " + packet.getCellsLeft());
}
@Override
public void visitPacket(ChangeCellPacket packet) {
throw new UnsupportedOperationException("Unimplemented method 'visitPacketChangeCell'");
}
}