debut debut
This commit is contained in:
51
src/Ex6/Client.java
Normal file
51
src/Ex6/Client.java
Normal 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
46
src/Ex6/Connexion.java
Normal 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
60
src/Ex6/Joueur.java
Normal 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
5
src/Ex6/Packet.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package Ex6;
|
||||
|
||||
public abstract class Packet {
|
||||
public abstract void accept(PacketVisitor visitor);
|
||||
}
|
||||
22
src/Ex6/PacketVisitor.java
Normal file
22
src/Ex6/PacketVisitor.java
Normal 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);
|
||||
}
|
||||
29
src/Ex6/packets/EndGamePacket.java
Normal file
29
src/Ex6/packets/EndGamePacket.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
16
src/Ex6/packets/InvalidMovePacket.java
Normal file
16
src/Ex6/packets/InvalidMovePacket.java
Normal 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);
|
||||
}
|
||||
}
|
||||
16
src/Ex6/packets/LeavePacket.java
Normal file
16
src/Ex6/packets/LeavePacket.java
Normal 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);
|
||||
}
|
||||
}
|
||||
25
src/Ex6/packets/NewGamePacket.java
Normal file
25
src/Ex6/packets/NewGamePacket.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
24
src/Ex6/packets/PlayMovePacket.java
Normal file
24
src/Ex6/packets/PlayMovePacket.java
Normal 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;
|
||||
}
|
||||
}
|
||||
29
src/Ex6/packets/PlayerMovePacket.java
Normal file
29
src/Ex6/packets/PlayerMovePacket.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user