58 lines
1.7 KiB
Java
58 lines
1.7 KiB
Java
import java.io.IOException;
|
|
import java.net.DatagramPacket;
|
|
import java.net.DatagramSocket;
|
|
import java.net.InetAddress;
|
|
import java.net.SocketException;
|
|
|
|
public class Server {
|
|
|
|
private final DatagramSocket socket;
|
|
|
|
public Server(int port) throws SocketException {
|
|
this.socket = new DatagramSocket(port);
|
|
new Thread(this::readMessages).start();
|
|
}
|
|
|
|
public int getPort() {
|
|
return this.socket.getLocalPort();
|
|
}
|
|
|
|
private void sendMessage(String message, InetAddress address, int port) throws IOException {
|
|
byte[] buffer = message.getBytes();
|
|
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
|
|
this.socket.send(packet);
|
|
}
|
|
|
|
private void processHandshake(DatagramPacket packet) throws IOException {
|
|
String message = new String(packet.getData(), 0, packet.getLength());
|
|
String machineName = message.split(" ")[2];
|
|
System.out.println("\t[Server] Nouveau client : @" + packet.getAddress().getHostAddress() + ": " + packet.getPort());
|
|
sendMessage("Serveur " + machineName + " ready", packet.getAddress(), packet.getPort());
|
|
}
|
|
|
|
private void processMessage(DatagramPacket packet) throws IOException {
|
|
String message = new String(packet.getData(), 0, packet.getLength());
|
|
System.out.println("[Server] Message recieved : " + message);
|
|
if (message.startsWith("hello serveur")) {
|
|
processHandshake(packet);
|
|
return;
|
|
}
|
|
sendMessage(message, packet.getAddress(), packet.getPort());
|
|
}
|
|
|
|
private void readMessages() {
|
|
while (true) {
|
|
byte[] buffer = new byte[1024];
|
|
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
|
try {
|
|
this.socket.receive(packet);
|
|
processMessage(packet);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|