Merge branch 'dev' into maximilien
This commit is contained in:
commit
067d9d661d
@ -67,12 +67,18 @@ public class StoreProcessor implements Runnable, AutoCloseable {
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
// Envoie donnée au StoreBackEnd
|
||||
String command = this.reader.readLine();
|
||||
// TODO gestion de la réception de commandes, fichier, ...
|
||||
if (command != null) System.out.println("StoreBackEnd: " + command);
|
||||
|
||||
// Réception donnée du StoreBackEnd
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// Alerter le FileFrontEnd que ce store processor est disponible pour gérer de nouvelle demande
|
||||
fileFrontEnd.onStoreAvailable(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ public class Task {
|
||||
private TaskStatus status;
|
||||
private String command;
|
||||
private String client;
|
||||
private String store;
|
||||
private String storeDomain;
|
||||
|
||||
public Task() {
|
||||
|
||||
|
@ -1,4 +1,13 @@
|
||||
package lightcontainer.interfaces;
|
||||
|
||||
import lightcontainer.domains.StoreProcessor;
|
||||
|
||||
public interface StoreProcessorFFE {
|
||||
|
||||
/**
|
||||
* Permet à un {@link StoreProcessor} d'avertir le FFE qu'il est disponible
|
||||
* @param store
|
||||
*/
|
||||
void onStoreAvailable(StoreProcessor store);
|
||||
|
||||
}
|
||||
|
@ -1,31 +0,0 @@
|
||||
package lightcontainer.protocol;
|
||||
|
||||
public class HelloRule extends Protocol {
|
||||
// Variables
|
||||
|
||||
// Constructor
|
||||
protected HelloRule() {
|
||||
super("HELLO", "HELLO "); // TODO : add the regex here (sbe_hello = "HELLO bl domain bl port line")
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the rule on a command.
|
||||
*
|
||||
* This function allows you to check a command and process those groups (parameters)
|
||||
* use the utility functions of {@link Protocol} to facilitate processing, see @see.
|
||||
*
|
||||
* @param cmd Command on which to execute the rule.
|
||||
* @see Protocol#execute(String)
|
||||
* @see #matcherCheck(String)
|
||||
* @see #matcherGetGroups()
|
||||
* @since 1.0
|
||||
*/
|
||||
@Override
|
||||
public void execute(String cmd) {
|
||||
if (matcherCheck(cmd)) {
|
||||
System.out.println("Good rule ;-) !");
|
||||
} else {
|
||||
System.out.println("OUPPS unknown rule !");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package lightcontainer.protocol;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public abstract class ProtocolReader {
|
||||
|
||||
private final Pattern rulePattern;
|
||||
|
||||
protected ProtocolReader(String pattern) {
|
||||
this.rulePattern = Pattern.compile(pattern);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet de lancer la décomposition d'une commande pour en extraire les données
|
||||
* @param data Contenu de la commande
|
||||
*/
|
||||
public boolean execute(String data) {
|
||||
Matcher ruleMatcher = this.rulePattern.matcher(data);
|
||||
|
||||
if (ruleMatcher.matches()) {
|
||||
String[] groups = new String[ruleMatcher.groupCount()];
|
||||
|
||||
for (int i = 1; i <= groups.length; ++i)
|
||||
groups[i - 1] = ruleMatcher.group(i);
|
||||
|
||||
onExecuted(groups);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette méthode est appelée lors de l'exécution de la règle
|
||||
* @param data
|
||||
*/
|
||||
protected abstract void onExecuted(String... data);
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package lightcontainer.protocol.rules;
|
||||
|
||||
import lightcontainer.protocol.ProtocolReader;
|
||||
|
||||
public class HelloRule extends ProtocolReader {
|
||||
|
||||
private static final String PATTERN = "^HELLO ([A-Za-z0-9]{5,20}) ([0-9]{1,5})\r\n$";
|
||||
|
||||
// Index du domain dans le tableau de donnée
|
||||
private static final int DOMAIN = 0;
|
||||
|
||||
//Index du port dans le tableau de donnée
|
||||
private static final int PORT = 1;
|
||||
|
||||
public HelloRule() {
|
||||
super(PATTERN);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onExecuted(String... data) {
|
||||
String domain = data[DOMAIN], port = data[PORT];
|
||||
|
||||
System.out.printf("Règle Hello avec domain=%s et port=%s\n", domain, port);
|
||||
}
|
||||
|
||||
}
|
@ -1,20 +1,43 @@
|
||||
package lightcontainer.repository;
|
||||
|
||||
import lightcontainer.domains.ClientHandler;
|
||||
import lightcontainer.domains.StoreProcessor;
|
||||
import lightcontainer.domains.Task;
|
||||
import lightcontainer.interfaces.ClientHandlerFFE;
|
||||
import lightcontainer.interfaces.StoreProcessorFFE;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||
|
||||
public class FileFrontEnd implements ClientHandlerFFE, StoreProcessorFFE {
|
||||
// Variables
|
||||
private Deque<Task> tasks = new LinkedList<>();
|
||||
private Deque<Task> tasks = new ConcurrentLinkedDeque<>();
|
||||
private ClientHandlerRepository clientRepository; // TODO -> pourquoi pas une interface ? end
|
||||
private StoreProcessorRepository storeRepository; // TODO -> pourquoi pas une interface ? end
|
||||
|
||||
// Constructor
|
||||
public FileFrontEnd() {
|
||||
public FileFrontEnd(ClientHandlerRepository clientRepo, StoreProcessorRepository storeRepo) {
|
||||
this.clientRepository = clientRepo;
|
||||
this.storeRepository = storeRepo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appelé quand nouvelle tâche
|
||||
*/
|
||||
public void alertStoreProcessors(Task task) {
|
||||
// On avertit les stor processors d'une nouvelle tâche
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet à un {@link StoreProcessor} d'avertir le FFE qu'il est disponible
|
||||
*
|
||||
* @param store
|
||||
*/
|
||||
@Override
|
||||
public void onStoreAvailable(StoreProcessor store) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,20 @@
|
||||
package lightcontainer.protocol.rules;
|
||||
|
||||
import lightcontainer.protocol.ProtocolReader;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class HelloRuleTest {
|
||||
|
||||
@Test
|
||||
public void whenRuleIsRightThenIsExecute() {
|
||||
// GIVEN
|
||||
ProtocolReader protocolReader = new HelloRule();
|
||||
String request = "HELLO bento 42890\r\n";
|
||||
|
||||
// EXPECT
|
||||
assertTrue(protocolReader.execute(request));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user