Ajout possibilité d'écrire un fichier sur le réseau

This commit is contained in:
Benjamin 2022-03-05 16:01:22 +01:00
parent 31e8ac2bd2
commit f0e9815844
5 changed files with 24 additions and 16 deletions

View File

@ -5,15 +5,13 @@ package lightcontainer;
import lightcontainer.domains.server.MulticastServerListener; import lightcontainer.domains.server.MulticastServerListener;
import lightcontainer.domains.server.UnicastServerListener; import lightcontainer.domains.server.UnicastServerListener;
import lightcontainer.interfaces.MulticastSPR;
import lightcontainer.interfaces.ProtocolRepository; import lightcontainer.interfaces.ProtocolRepository;
import lightcontainer.protocol.ProtocolReader;
import lightcontainer.protocol.rules.reader.FilelistRule; import lightcontainer.protocol.rules.reader.FilelistRule;
import lightcontainer.protocol.rules.reader.HelloRule; import lightcontainer.protocol.rules.reader.HelloRule;
import lightcontainer.protocol.rules.reader.SavefileRule; import lightcontainer.protocol.rules.reader.SavefileRule;
import lightcontainer.protocol.rules.reader.SigninRule; import lightcontainer.protocol.rules.reader.SigninRule;
import lightcontainer.protocol.rules.writer.SignError; import lightcontainer.protocol.rules.writer.SignErrorRule;
import lightcontainer.protocol.rules.writer.SignOk; import lightcontainer.protocol.rules.writer.SignOkRule;
import lightcontainer.repository.ClientHandlerRepository; import lightcontainer.repository.ClientHandlerRepository;
import lightcontainer.repository.FileFrontEnd; import lightcontainer.repository.FileFrontEnd;
import lightcontainer.repository.ProtocolRepositoryImpl; import lightcontainer.repository.ProtocolRepositoryImpl;
@ -38,8 +36,8 @@ public class App {
protocolRep.addReader(new FilelistRule()); protocolRep.addReader(new FilelistRule());
protocolRep.addReader(new SavefileRule()); protocolRep.addReader(new SavefileRule());
protocolRep.addWriter(new SignOk()); protocolRep.addWriter(new SignOkRule());
protocolRep.addWriter(new SignError()); protocolRep.addWriter(new SignErrorRule());
new UnicastServerListener(clientRep, protocolRep, UNICAST_PORT); new UnicastServerListener(clientRep, protocolRep, UNICAST_PORT);
new MulticastServerListener(storeRep, protocolRep, MULTICAST_IP, MULTICAST_PORT); new MulticastServerListener(storeRep, protocolRep, MULTICAST_IP, MULTICAST_PORT);

View File

@ -4,8 +4,8 @@ import lightcontainer.interfaces.ClientHandlerFFE;
import lightcontainer.interfaces.ProtocolRepository; import lightcontainer.interfaces.ProtocolRepository;
import lightcontainer.protocol.ProtocolReader; import lightcontainer.protocol.ProtocolReader;
import lightcontainer.protocol.rules.reader.SigninRule; import lightcontainer.protocol.rules.reader.SigninRule;
import lightcontainer.protocol.rules.writer.SignError; import lightcontainer.protocol.rules.writer.SignErrorRule;
import lightcontainer.protocol.rules.writer.SignOk; import lightcontainer.protocol.rules.writer.SignOkRule;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
@ -114,13 +114,13 @@ public class ClientHandler implements Runnable, AutoCloseable {
SigninRule.Result signinResult = (SigninRule.Result) ruleResult; SigninRule.Result signinResult = (SigninRule.Result) ruleResult;
if (signinResult.checkCredentials()) { if (signinResult.checkCredentials()) {
this.login = signinResult.getLogin(); this.login = signinResult.getLogin();
writer.write(protocolRep.executeWriter(SignOk.NAME)); writer.write(protocolRep.executeWriter(SignOkRule.NAME));
writer.flush(); writer.flush();
return; return;
} }
} catch (ClassCastException ignored) {} } catch (ClassCastException ignored) {}
writer.write(protocolRep.executeWriter(SignError.NAME)); // Envoie SignError car echec de la connection writer.write(protocolRep.executeWriter(SignErrorRule.NAME)); // Envoie SignError car echec de la connection
writer.flush(); writer.flush();
this.close(); // Fermeture de la connection this.close(); // Fermeture de la connection
} }

View File

@ -1,5 +1,7 @@
package lightcontainer.protocol; package lightcontainer.protocol;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.StringJoiner; import java.util.StringJoiner;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -19,16 +21,17 @@ public abstract class ProtocolWriter {
* Permet de récupérer le nom de la commande. * Permet de récupérer le nom de la commande.
* @return Nom de la commande. * @return Nom de la commande.
*/ */
public String getCmdName() { public final String getCmdName() {
return cmdName; return cmdName;
} }
/** /**
* Permet de contruire une commande selon une règle établie. * Permet de contruire une commande selon une règle établie.
* @param data Les données à ajouter dans la commande; L'ordre défini leur position dans la commande * @param data Les données à ajouter dans la commande; L'ordre défini leur position dans la commande
* @return La commande construite * @return La commande construite
*/ */
public String execute(String... data) { public final String execute(String... data) {
// Concatatène le nom de la commande avec les données (trim), avec un espace entre chaque // Concatatène le nom de la commande avec les données (trim), avec un espace entre chaque
String command; String command;
StringJoiner builder = new StringJoiner(" ", this.cmdName, "\r\n"); StringJoiner builder = new StringJoiner(" ", this.cmdName, "\r\n");
@ -42,4 +45,11 @@ public abstract class ProtocolWriter {
Matcher ruleMatcher = this.rulePattern.matcher(command); Matcher ruleMatcher = this.rulePattern.matcher(command);
return ruleMatcher.matches() ? command : null; return ruleMatcher.matches() ? command : null;
} }
/**
* Permet d'écrire un fichier sur le réseau. Cad envoyer le contenu d'un fichier sur le réseau.
* Redéfinissez cette méthode pour l'utiliser.
* @param writer Buffer à remplir qui sera envoyer via le réseau
*/
public void write(OutputStream writer) {}
} }

View File

@ -2,13 +2,13 @@ package lightcontainer.protocol.rules.writer;
import lightcontainer.protocol.ProtocolWriter; import lightcontainer.protocol.ProtocolWriter;
public class SignError extends ProtocolWriter { public class SignErrorRule extends ProtocolWriter {
private static final String PATTERN = "^SIGN_ERROR\r\n$"; private static final String PATTERN = "^SIGN_ERROR\r\n$";
public static final String NAME = "SIGN_ERROR"; public static final String NAME = "SIGN_ERROR";
public SignError() { public SignErrorRule() {
super(NAME, PATTERN); super(NAME, PATTERN);
} }
} }

View File

@ -2,13 +2,13 @@ package lightcontainer.protocol.rules.writer;
import lightcontainer.protocol.ProtocolWriter; import lightcontainer.protocol.ProtocolWriter;
public class SignOk extends ProtocolWriter { public class SignOkRule extends ProtocolWriter {
private static final String PATTERN = "^SIGN_OK\r\n$"; private static final String PATTERN = "^SIGN_OK\r\n$";
public static final String NAME = "SIGN_OK"; public static final String NAME = "SIGN_OK";
public SignOk() { public SignOkRule() {
super(NAME, PATTERN); super(NAME, PATTERN);
} }
} }