From 1492f078f97bbc635fc3528719382842ea534f94 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Wed, 4 Feb 2026 11:16:49 +0100 Subject: [PATCH] debut debut --- src/Ex6/Client.java | 51 ++++++++++++++++++++++ src/Ex6/Connexion.java | 46 ++++++++++++++++++++ src/Ex6/Joueur.java | 60 ++++++++++++++++++++++++++ src/Ex6/Packet.java | 5 +++ src/Ex6/PacketVisitor.java | 22 ++++++++++ src/Ex6/packets/EndGamePacket.java | 29 +++++++++++++ src/Ex6/packets/InvalidMovePacket.java | 16 +++++++ src/Ex6/packets/LeavePacket.java | 16 +++++++ src/Ex6/packets/NewGamePacket.java | 25 +++++++++++ src/Ex6/packets/PlayMovePacket.java | 24 +++++++++++ src/Ex6/packets/PlayerMovePacket.java | 29 +++++++++++++ 11 files changed, 323 insertions(+) create mode 100644 src/Ex6/Client.java create mode 100644 src/Ex6/Connexion.java create mode 100644 src/Ex6/Joueur.java create mode 100644 src/Ex6/Packet.java create mode 100644 src/Ex6/PacketVisitor.java create mode 100644 src/Ex6/packets/EndGamePacket.java create mode 100644 src/Ex6/packets/InvalidMovePacket.java create mode 100644 src/Ex6/packets/LeavePacket.java create mode 100644 src/Ex6/packets/NewGamePacket.java create mode 100644 src/Ex6/packets/PlayMovePacket.java create mode 100644 src/Ex6/packets/PlayerMovePacket.java diff --git a/src/Ex6/Client.java b/src/Ex6/Client.java new file mode 100644 index 0000000..193be04 --- /dev/null +++ b/src/Ex6/Client.java @@ -0,0 +1,51 @@ +package Ex6; + +import java.io.IOException; +import java.net.Socket; + +import Ex6.packets.EndGamePacket; +import Ex6.packets.InvalidMovePacket; +import Ex6.packets.LeavePacket; +import Ex6.packets.NewGamePacket; +import Ex6.packets.PlayMovePacket; +import Ex6.packets.PlayerMovePacket; + +public class Client extends Connexion { + + public Client(Socket socket) throws IOException { + super(socket); + } + + @Override + public void visit(EndGamePacket packet) { + System.out.println("Jeu terminé !"); + // TODO: afficher vainqueur + } + + @Override + public void visit(InvalidMovePacket packet) { + System.out.println("Coups non autorisé !"); + } + + @Override + public void visit(NewGamePacket packet) { + System.out.println("Nouvelle partie !"); + // TODO: afficher tour + } + + @Override + public void visit(PlayerMovePacket packet) { + // TODO: afficher plateau + } + + @Override + public void visit(LeavePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + + @Override + public void visit(PlayMovePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + +} diff --git a/src/Ex6/Connexion.java b/src/Ex6/Connexion.java new file mode 100644 index 0000000..238ddd9 --- /dev/null +++ b/src/Ex6/Connexion.java @@ -0,0 +1,46 @@ +package Ex6; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.Socket; + +public abstract class Connexion implements PacketVisitor { + + private final Socket socket; + private final ObjectOutputStream out; + private final ObjectInputStream in; + + public Connexion(Socket socket) throws IOException { + this.socket = socket; + this.out = new ObjectOutputStream(this.socket.getOutputStream()); + this.in = new ObjectInputStream(this.socket.getInputStream()); + } + + public void sendPacket(Packet packet) { + try { + out.writeObject(packet); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private Packet readPacket() throws ClassNotFoundException, IOException { + Object o = in.readObject(); + Packet packet = (Packet) o; + return packet; + } + + public void processPacket() throws ClassNotFoundException, IOException { + Packet packet = readPacket(); + packet.accept(this); + } + + protected void close() { + try { + this.socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/Ex6/Joueur.java b/src/Ex6/Joueur.java new file mode 100644 index 0000000..15f42fa --- /dev/null +++ b/src/Ex6/Joueur.java @@ -0,0 +1,60 @@ +package Ex6; + +import java.io.IOException; +import java.net.Socket; + +import Ex6.packets.EndGamePacket; +import Ex6.packets.InvalidMovePacket; +import Ex6.packets.LeavePacket; +import Ex6.packets.NewGamePacket; +import Ex6.packets.PlayMovePacket; +import Ex6.packets.PlayerMovePacket; + +public class Joueur extends Connexion { + + public Joueur(Socket socket) throws IOException { + super(socket); + new Thread(this::readPackets).start(); + } + + private void readPackets() { + while (true) { + try { + processPacket(); + } catch (ClassNotFoundException | IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public void visit(LeavePacket packet) { + close(); + } + + @Override + public void visit(PlayMovePacket packet) { + //TODO: vérifier coups + } + + @Override + public void visit(EndGamePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + + @Override + public void visit(InvalidMovePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + + @Override + public void visit(NewGamePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + + @Override + public void visit(PlayerMovePacket packet) { + throw new UnsupportedOperationException("Unimplemented method 'visit'"); + } + +} diff --git a/src/Ex6/Packet.java b/src/Ex6/Packet.java new file mode 100644 index 0000000..16d54ac --- /dev/null +++ b/src/Ex6/Packet.java @@ -0,0 +1,5 @@ +package Ex6; + +public abstract class Packet { + public abstract void accept(PacketVisitor visitor); +} diff --git a/src/Ex6/PacketVisitor.java b/src/Ex6/PacketVisitor.java new file mode 100644 index 0000000..dea7cb9 --- /dev/null +++ b/src/Ex6/PacketVisitor.java @@ -0,0 +1,22 @@ +package Ex6; + +import Ex6.packets.EndGamePacket; +import Ex6.packets.InvalidMovePacket; +import Ex6.packets.LeavePacket; +import Ex6.packets.NewGamePacket; +import Ex6.packets.PlayMovePacket; +import Ex6.packets.PlayerMovePacket; + +public interface PacketVisitor { + void visit(EndGamePacket packet); + + void visit(InvalidMovePacket packet); + + void visit(LeavePacket packet); + + void visit(NewGamePacket packet); + + void visit(PlayerMovePacket packet); + + void visit(PlayMovePacket packet); +} diff --git a/src/Ex6/packets/EndGamePacket.java b/src/Ex6/packets/EndGamePacket.java new file mode 100644 index 0000000..d69bacf --- /dev/null +++ b/src/Ex6/packets/EndGamePacket.java @@ -0,0 +1,29 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; +import Ex6.Jeu.EtatCase; + +/** + * @brief Packet envoyé pour annoncer la fin de la partie + */ +public class EndGamePacket extends Packet implements Serializable{ + + private final EtatCase vainqueur; + + public EndGamePacket(EtatCase vainqueur) { + this.vainqueur = vainqueur; + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } + + public EtatCase getVainqueur() { + return vainqueur; + } + +} diff --git a/src/Ex6/packets/InvalidMovePacket.java b/src/Ex6/packets/InvalidMovePacket.java new file mode 100644 index 0000000..b6b3f2e --- /dev/null +++ b/src/Ex6/packets/InvalidMovePacket.java @@ -0,0 +1,16 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; + +public class InvalidMovePacket extends Packet implements Serializable { + public InvalidMovePacket() { + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } +} diff --git a/src/Ex6/packets/LeavePacket.java b/src/Ex6/packets/LeavePacket.java new file mode 100644 index 0000000..3bbee74 --- /dev/null +++ b/src/Ex6/packets/LeavePacket.java @@ -0,0 +1,16 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; + +public class LeavePacket extends Packet implements Serializable{ + public LeavePacket() { + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } +} diff --git a/src/Ex6/packets/NewGamePacket.java b/src/Ex6/packets/NewGamePacket.java new file mode 100644 index 0000000..baa8e0d --- /dev/null +++ b/src/Ex6/packets/NewGamePacket.java @@ -0,0 +1,25 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; + +public class NewGamePacket extends Packet implements Serializable{ + + private final boolean rond; + + public NewGamePacket(boolean rond) { + this.rond = rond; + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } + + public boolean isRond() { + return rond; + } + +} diff --git a/src/Ex6/packets/PlayMovePacket.java b/src/Ex6/packets/PlayMovePacket.java new file mode 100644 index 0000000..77fba0c --- /dev/null +++ b/src/Ex6/packets/PlayMovePacket.java @@ -0,0 +1,24 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; + +public class PlayMovePacket extends Packet implements Serializable{ + + private final int cellIndex; + + public PlayMovePacket(int cellIndex) { + this.cellIndex = cellIndex; + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } + + public int getCellIndex() { + return cellIndex; + } +} diff --git a/src/Ex6/packets/PlayerMovePacket.java b/src/Ex6/packets/PlayerMovePacket.java new file mode 100644 index 0000000..c5814f1 --- /dev/null +++ b/src/Ex6/packets/PlayerMovePacket.java @@ -0,0 +1,29 @@ +package Ex6.packets; + +import java.io.Serializable; + +import Ex6.Packet; +import Ex6.PacketVisitor; + +/** + * @brief Packet envoyé par le serveur pour confirmer un coup et changer le + * tour. + */ +public class PlayerMovePacket extends Packet implements Serializable { + + private final int cellIndex; + + public PlayerMovePacket(int cellIndex) { + this.cellIndex = cellIndex; + } + + @Override + public void accept(PacketVisitor visitor) { + visitor.visit(this); + } + + public int getCellIndex() { + return cellIndex; + } + +}