Vérification pour empêche le doublon de Storbackend

This commit is contained in:
Benjamin Lejeune 2022-02-26 17:48:42 +01:00
parent 9fdc69d75f
commit 9eee080b60
5 changed files with 34 additions and 9 deletions

View File

@ -18,10 +18,10 @@ public class App {
// -- Unicast client port // -- Unicast client port
private static final int UNICAST_PORT = 8500; private static final int UNICAST_PORT = 8500;
// -- Multicast listener ip, port // -- Multicast listener ip, port
private static final String MULTICAST_IP = "226.0.0.1"; private static final String MULTICAST_IP = "226.66.66.1";
private static final int MULTICAST_PORT = 42500; private static final int MULTICAST_PORT = 42500;
public static void main(String[] args) { public static void main(String[] args) throws InterruptedException {
// Create all repository // Create all repository
ClientHandlerRepository clientRep = new ClientHandlerRepository(); ClientHandlerRepository clientRep = new ClientHandlerRepository();
StoreProcessorRepository storeRep = new StoreProcessorRepository(); StoreProcessorRepository storeRep = new StoreProcessorRepository();
@ -30,11 +30,15 @@ public class App {
protocolRep.addReader(new HelloRule()); protocolRep.addReader(new HelloRule());
new UnicastServerListener(clientRep, UNICAST_PORT); new UnicastServerListener(clientRep, UNICAST_PORT);
new MulticastServerListener(storeRep, protocolRep, MULTICAST_IP, MULTICAST_PORT); MulticastServerListener multiCast = new MulticastServerListener(storeRep, protocolRep, MULTICAST_IP, MULTICAST_PORT);
multiCast.run();
FileFrontEnd ffe = new FileFrontEnd(clientRep, storeRep); FileFrontEnd ffe = new FileFrontEnd(clientRep, storeRep);
// close repo et client et server. // close repo et client et server.
Thread.sleep(60000);
multiCast.stop();
clientRep.close(); clientRep.close();
storeRep.close(); storeRep.close();
} }

View File

@ -5,6 +5,7 @@ import lightcontainer.interfaces.StoreProcessorFFE;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Objects;
/** /**
* StoreProcessor * StoreProcessor
@ -21,6 +22,7 @@ import java.nio.charset.StandardCharsets;
* @author Jérémi NIHART <j.nihart@student.helmo.be> * @author Jérémi NIHART <j.nihart@student.helmo.be>
*/ */
public class StoreProcessor implements Runnable, AutoCloseable { public class StoreProcessor implements Runnable, AutoCloseable {
private String domain;
// Variables // Variables
private final StoreProcessorFFE fileFrontEnd; private final StoreProcessorFFE fileFrontEnd;
private final Socket store; private final Socket store;
@ -30,7 +32,8 @@ public class StoreProcessor implements Runnable, AutoCloseable {
private PrintWriter writer; private PrintWriter writer;
// Constructor // Constructor
public StoreProcessor(Socket socket, StoreProcessorFFE ffe) { public StoreProcessor(Socket socket, String domain, StoreProcessorFFE ffe) {
this.domain = domain;
this.fileFrontEnd = ffe; this.fileFrontEnd = ffe;
this.store = socket; this.store = socket;
this.client_run = false; this.client_run = false;
@ -92,4 +95,17 @@ public class StoreProcessor implements Runnable, AutoCloseable {
} catch (IOException ignored) { } } catch (IOException ignored) { }
} }
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StoreProcessor that = (StoreProcessor) o;
return Objects.equals(domain, that.domain);
}
@Override
public int hashCode() {
return Objects.hash(domain);
}
} }

View File

@ -65,13 +65,16 @@ public class MulticastServerListener implements Runnable {
try { try {
// TODO Récupérer le port du message du packet et le setup (add description of the line). // TODO Récupérer le port du message du packet et le setup (add description of the line).
HelloRule.Result readerResult = protocolRep.executeReader(data); HelloRule.Result readerResult = protocolRep.executeReader(data);
System.out.printf("Réception en multicast : Domain=%s | Port=%d\n", readerResult.getDomain(), readerResult.getPort());
Socket socket = new Socket(packet.getAddress(), readerResult.getPort()); Socket socket = new Socket(packet.getAddress(), readerResult.getPort());
// Create the store processor // Create the store processor
StoreProcessor storeProcessor = new StoreProcessor(socket, null); // TODO <!!!> : Voir comment on procède get via repo ou ici ?! StoreProcessor storeProcessor = new StoreProcessor(socket, readerResult.getDomain(), null); // TODO <!!!> : Voir comment on procède get via repo ou ici ?!
// Add the store processor to its repository // Add the store processor to its repository
this.repository.addStore(storeProcessor); this.repository.addStore(storeProcessor);
} catch (IOException ignore) { } catch (IOException ignore) {
ignore.printStackTrace();
} }
} }
} catch (Exception ignore) { } catch (Exception ignore) {

View File

@ -45,7 +45,6 @@ public class HelloRule extends ProtocolReader {
String domain = data[DOMAIN]; String domain = data[DOMAIN];
int port = Integer.parseInt(data[PORT]); int port = Integer.parseInt(data[PORT]);
System.out.printf("Regle Hello avec domain=%s et port=%s\n", domain, port);
return new HelloRule.Result(domain, port); return new HelloRule.Result(domain, port);
} }

View File

@ -5,7 +5,9 @@ import lightcontainer.domains.server.MulticastServerListener;
import lightcontainer.interfaces.MulticastSPR; import lightcontainer.interfaces.MulticastSPR;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
// TODO : C'est genre un ClientHandlerManager quoi hein, normal qu'il fasse blinder de chose ;) // TODO : C'est genre un ClientHandlerManager quoi hein, normal qu'il fasse blinder de chose ;)
/** /**
* StoreProcessorRepository * StoreProcessorRepository
@ -21,12 +23,12 @@ import java.util.List;
*/ */
public class StoreProcessorRepository implements AutoCloseable, MulticastSPR { public class StoreProcessorRepository implements AutoCloseable, MulticastSPR {
// Variables // Variables
private final List<StoreProcessor> handlers; private final Set<StoreProcessor> handlers;
private MulticastServerListener server; private MulticastServerListener server;
// Constructor // Constructor
public StoreProcessorRepository() { public StoreProcessorRepository() {
this.handlers = new ArrayList<>(); this.handlers = new HashSet<>();
} }
/** /**
@ -49,6 +51,7 @@ public class StoreProcessorRepository implements AutoCloseable, MulticastSPR {
@Override @Override
public void addStore(StoreProcessor store) { public void addStore(StoreProcessor store) {
this.handlers.add(store); this.handlers.add(store);
System.out.println(handlers.size());
} }
/** /**