refactor/architecture #1

Closed
Xeon0X wants to merge 8 commits from refactor/architecture into main
4 changed files with 72 additions and 47 deletions
Showing only changes of commit 59ea8422b0 - Show all commits

View File

@@ -46,7 +46,7 @@ task runServer(type: JavaExec) {
group = 'application'
mainClass = application.mainClass
classpath = sourceSets.main.runtimeClasspath
args = ['server']
args = ['--server']
}
task runClient(type: JavaExec) {
@@ -54,5 +54,5 @@ task runClient(type: JavaExec) {
group = 'application'
mainClass = application.mainClass
classpath = sourceSets.main.runtimeClasspath
args = ['client']
args = ['--client']
}

View File

@@ -10,28 +10,48 @@ public class App {
}
public static void main(String[] args) {
if (args.length == 0) {
System.out.println(
"Please use --args='client' or --args='server'."
);
String mode = null;
// Parse arguments
for (String arg : args) {
switch (arg.toLowerCase()) {
case "--client":
mode = "client";
break;
case "--server":
mode = "server";
break;
default:
System.out.println("Unknown argument: " + arg);
printUsage();
return;
}
}
// Check if mode is specified
if (mode == null) {
System.out.println("No mode specified.");
printUsage();
return;
}
String mode = args[0];
switch (mode.toLowerCase()) {
// Execute based on mode
switch (mode) {
case "client":
// Run the client
System.out.println("Starting client...");
Client.main(new String[] {});
break;
case "server":
// Run the server
System.out.println("Starting server...");
Server.run();
break;
default:
System.out.println("Unknown mode: " + mode);
}
}
private static void printUsage() {
System.out.println("Usage: ./gradlew run --args='option'");
System.out.println("Options:");
System.out.println(" --client Run in client mode");
System.out.println(" --server Run in server mode");
}
}

View File

@@ -9,12 +9,16 @@ public class Client {
InetAddress clientAddress;
int clientPort;
public InetAddress getClientAddress() {
return clientAddress;
public void setPort(int port) {
this.clientPort = port;
}
public int getClientPort() {
return clientPort;
public int getPort() {
return this.clientPort;
}
public InetAddress getAddress() {
return this.clientAddress;
}
public Client(InetAddress address, int port) {

View File

@@ -31,6 +31,17 @@ public class Server {
return socket;
}
private DatagramSocket getNewSocket() {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(); // Reserve a random port
} catch (Exception e) {
System.err.println("Failed to bind server socket");
e.printStackTrace();
}
return socket;
}
private DatagramPacket read(DatagramSocket socket) {
byte[] receivedData = new byte[1024];
DatagramPacket receivedPacket = new DatagramPacket(
@@ -50,42 +61,32 @@ public class Server {
return new Client(packet.getAddress(), packet.getPort());
}
// public void test(String[] args) {
// while (mainServerPortListening) {
// try {
// DatagramSocket socket = new DatagramSocket(); // Reserve new port
private void attributeNewPort(Client client) {
DatagramSocket newSocket = getNewSocket();
int port = newSocket.getLocalPort();
String response = "PORT:" + port;
client.setPort(port);
// String response = "PORT:" + socket.getLocalPort();
// System.out.println(response);
// byte[] envoyees; // tampon d'émission
// envoyees = response.getBytes();
// DatagramPacket packetToSend = new DatagramPacket(
// envoyees,
// envoyees.length,
// clientAddress,
// clientPort
// );
// mainServerSocket.send(packetToSend);
// Thread thread = new Thread(() -> createThread(socket));
// thread.start();
// } catch (Exception e) {
// System.err.println(e);
// }
// }
// mainServerSocket.close();
// }
byte[] sendData;
sendData = response.getBytes();
DatagramPacket packetToSend = new DatagramPacket(
sendData,
sendData.length,
client.getAddress(),
port
);
try {
this.mainServerSocket.send(packetToSend);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void run() {
System.out.println("Server started");
Server server = new Server();
DatagramPacket packet = server.read(server.mainServerSocket);
Client client = server.getClient(packet);
System.out.println(
"Client: " +
client.getClientAddress() +
":" +
client.getClientPort()
);
server.attributeNewPort(client);
}
}