debut debut

This commit is contained in:
2026-02-04 11:16:49 +01:00
parent 5c3e7fcdf5
commit 1492f078f9
11 changed files with 323 additions and 0 deletions

51
src/Ex6/Client.java Normal file
View File

@@ -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'");
}
}

46
src/Ex6/Connexion.java Normal file
View File

@@ -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();
}
}
}

60
src/Ex6/Joueur.java Normal file
View File

@@ -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'");
}
}

5
src/Ex6/Packet.java Normal file
View File

@@ -0,0 +1,5 @@
package Ex6;
public abstract class Packet {
public abstract void accept(PacketVisitor visitor);
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}