diff --git a/app/src/main/java/network/Connexion.java b/app/src/main/java/network/Connexion.java index bc09a21..ddf3f08 100644 --- a/app/src/main/java/network/Connexion.java +++ b/app/src/main/java/network/Connexion.java @@ -1,7 +1,9 @@ package network; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; @@ -11,7 +13,7 @@ import network.protocol.Packet; import network.protocol.PacketVisitor; public abstract class Connexion implements PacketVisitor { - + protected final DatagramSocket socket; protected final InetSocketAddress address; @@ -20,6 +22,21 @@ public abstract class Connexion implements PacketVisitor { this.address = address; } + public static record ReadInfo(Packet packet, InetSocketAddress address) {} + + public static ReadInfo readPacket(final DatagramSocket socket) + throws IOException, ClassNotFoundException { + byte[] buffer = new byte[65535]; + DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length); + socket.receive(dataPacket); + + InetSocketAddress address = new InetSocketAddress(dataPacket.getAddress(), dataPacket.getPort()); + + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dataPacket.getData())); + Packet packet = (Packet) ois.readObject(); + return new ReadInfo(packet, address); + } + public void sendPacket(Packet packet) { try { ByteArrayOutputStream stream = new ByteArrayOutputStream(); @@ -27,7 +44,8 @@ public abstract class Connexion implements PacketVisitor { oos.writeObject(packet); oos.flush(); byte[] data = stream.toByteArray(); - DatagramPacket dataPacket = new DatagramPacket(data, data.length, this.address.getAddress(), this.address.getPort()); + DatagramPacket dataPacket = new DatagramPacket(data, data.length, this.address.getAddress(), + this.address.getPort()); this.socket.send(dataPacket); } catch (IOException e) { e.printStackTrace(); diff --git a/app/src/main/java/network/client/ClientConnexion.java b/app/src/main/java/network/client/ClientConnexion.java index c368037..838d5a0 100644 --- a/app/src/main/java/network/client/ClientConnexion.java +++ b/app/src/main/java/network/client/ClientConnexion.java @@ -1,9 +1,6 @@ package network.client; -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.UnknownHostException; @@ -21,7 +18,6 @@ import network.protocol.packets.PlayerJoinPacket; import network.protocol.packets.PlayerLeavePacket; import network.protocol.packets.StartGamePacket; import network.protocol.packets.UpdatePlayerScorePacket; -import network.server.ServerConnexion; import sudoku.io.SudokuSerializer; public class ClientConnexion extends Connexion { @@ -39,12 +35,7 @@ public class ClientConnexion extends Connexion { private void readPackets() { while (!Thread.interrupted()) { try { - byte[] buffer = new byte[65535]; - DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length); - this.socket.receive(dataPacket); - - ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dataPacket.getData())); - Packet packet = (Packet) ois.readObject(); + Packet packet = Connexion.readPacket(this.socket).packet(); visit(packet); } catch (IOException e) { diff --git a/app/src/main/java/network/server/ServerReadThread.java b/app/src/main/java/network/server/ServerReadThread.java index 0a64974..3cffe48 100644 --- a/app/src/main/java/network/server/ServerReadThread.java +++ b/app/src/main/java/network/server/ServerReadThread.java @@ -1,11 +1,9 @@ package network.server; -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.net.DatagramPacket; import java.net.InetSocketAddress; +import network.Connexion; import network.protocol.Packet; public class ServerReadThread extends Thread { @@ -25,16 +23,11 @@ public class ServerReadThread extends Thread { public void run() { try { while (!interrupted()) { - byte[] buffer = new byte[1024]; - DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length); - this.server.serverSocket.receive(dataPacket); - - InetSocketAddress address = new InetSocketAddress(dataPacket.getAddress(), dataPacket.getPort()); - - ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dataPacket.getData())); - Packet packet = (Packet) ois.readObject(); + Connexion.ReadInfo read = Connexion.readPacket(this.server.serverSocket); + Packet packet = read.packet(); + InetSocketAddress address = read.address(); - if (!this.server.connexions.containsKey(dataPacket.getSocketAddress())) { + if (!this.server.connexions.containsKey(address)) { this.server.connexions.put(address, new ServerConnexion(address, server)); }