Compare commits
1 Commits
af0ac0ff77
...
udp
| Author | SHA1 | Date | |
|---|---|---|---|
| 05df8a56a7 |
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user