1 Commits

Author SHA1 Message Date
05df8a56a7 refactor read
Some checks failed
Linux arm64 / Build (push) Failing after 35s
2025-02-27 10:15:52 +01:00
3 changed files with 26 additions and 24 deletions

View File

@@ -1,7 +1,9 @@
package network; package network;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.net.DatagramPacket; import java.net.DatagramPacket;
import java.net.DatagramSocket; import java.net.DatagramSocket;
@@ -11,7 +13,7 @@ import network.protocol.Packet;
import network.protocol.PacketVisitor; import network.protocol.PacketVisitor;
public abstract class Connexion implements PacketVisitor { public abstract class Connexion implements PacketVisitor {
protected final DatagramSocket socket; protected final DatagramSocket socket;
protected final InetSocketAddress address; protected final InetSocketAddress address;
@@ -20,6 +22,21 @@ public abstract class Connexion implements PacketVisitor {
this.address = address; 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) { public void sendPacket(Packet packet) {
try { try {
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
@@ -27,7 +44,8 @@ public abstract class Connexion implements PacketVisitor {
oos.writeObject(packet); oos.writeObject(packet);
oos.flush(); oos.flush();
byte[] data = stream.toByteArray(); 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); this.socket.send(dataPacket);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

View File

@@ -1,9 +1,6 @@
package network.client; package network.client;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket; import java.net.DatagramSocket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
@@ -21,7 +18,6 @@ import network.protocol.packets.PlayerJoinPacket;
import network.protocol.packets.PlayerLeavePacket; import network.protocol.packets.PlayerLeavePacket;
import network.protocol.packets.StartGamePacket; import network.protocol.packets.StartGamePacket;
import network.protocol.packets.UpdatePlayerScorePacket; import network.protocol.packets.UpdatePlayerScorePacket;
import network.server.ServerConnexion;
import sudoku.io.SudokuSerializer; import sudoku.io.SudokuSerializer;
public class ClientConnexion extends Connexion { public class ClientConnexion extends Connexion {
@@ -39,12 +35,7 @@ public class ClientConnexion extends Connexion {
private void readPackets() { private void readPackets() {
while (!Thread.interrupted()) { while (!Thread.interrupted()) {
try { try {
byte[] buffer = new byte[65535]; Packet packet = Connexion.readPacket(this.socket).packet();
DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length);
this.socket.receive(dataPacket);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dataPacket.getData()));
Packet packet = (Packet) ois.readObject();
visit(packet); visit(packet);
} catch (IOException e) { } catch (IOException e) {

View File

@@ -1,11 +1,9 @@
package network.server; package network.server;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import network.Connexion;
import network.protocol.Packet; import network.protocol.Packet;
public class ServerReadThread extends Thread { public class ServerReadThread extends Thread {
@@ -25,16 +23,11 @@ public class ServerReadThread extends Thread {
public void run() { public void run() {
try { try {
while (!interrupted()) { while (!interrupted()) {
byte[] buffer = new byte[1024]; Connexion.ReadInfo read = Connexion.readPacket(this.server.serverSocket);
DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length); Packet packet = read.packet();
this.server.serverSocket.receive(dataPacket); InetSocketAddress address = read.address();
InetSocketAddress address = new InetSocketAddress(dataPacket.getAddress(), dataPacket.getPort());
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dataPacket.getData()));
Packet packet = (Packet) ois.readObject();
if (!this.server.connexions.containsKey(dataPacket.getSocketAddress())) { if (!this.server.connexions.containsKey(address)) {
this.server.connexions.put(address, new ServerConnexion(address, server)); this.server.connexions.put(address, new ServerConnexion(address, server));
} }