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' group = 'application'
mainClass = application.mainClass mainClass = application.mainClass
classpath = sourceSets.main.runtimeClasspath classpath = sourceSets.main.runtimeClasspath
args = ['server'] args = ['--server']
} }
task runClient(type: JavaExec) { task runClient(type: JavaExec) {
@@ -54,5 +54,5 @@ task runClient(type: JavaExec) {
group = 'application' group = 'application'
mainClass = application.mainClass mainClass = application.mainClass
classpath = sourceSets.main.runtimeClasspath classpath = sourceSets.main.runtimeClasspath
args = ['client'] args = ['--client']
} }

View File

@@ -10,28 +10,48 @@ public class App {
} }
public static void main(String[] args) { public static void main(String[] args) {
if (args.length == 0) { String mode = null;
System.out.println(
"Please use --args='client' or --args='server'." // 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; return;
} }
String mode = args[0]; // Execute based on mode
switch (mode) {
switch (mode.toLowerCase()) {
case "client": case "client":
// Run the client
System.out.println("Starting client..."); System.out.println("Starting client...");
Client.main(new String[] {}); Client.main(new String[] {});
break; break;
case "server": case "server":
// Run the server
System.out.println("Starting server..."); System.out.println("Starting server...");
Server.run(); Server.run();
break; 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; InetAddress clientAddress;
int clientPort; int clientPort;
public InetAddress getClientAddress() { public void setPort(int port) {
return clientAddress; this.clientPort = port;
} }
public int getClientPort() { public int getPort() {
return clientPort; return this.clientPort;
}
public InetAddress getAddress() {
return this.clientAddress;
} }
public Client(InetAddress address, int port) { public Client(InetAddress address, int port) {

View File

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