Possibilité de se connecter (factice), tout en recevant un message de confirmation ou d'erreur.
This commit is contained in:
parent
59ce081d8c
commit
f0461537f6
@ -5,8 +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.HelloRule;
|
import lightcontainer.protocol.rules.reader.HelloRule;
|
||||||
|
import lightcontainer.protocol.rules.reader.SigninRule;
|
||||||
|
import lightcontainer.protocol.rules.writer.SignError;
|
||||||
|
import lightcontainer.protocol.rules.writer.SignOk;
|
||||||
import lightcontainer.repository.ClientHandlerRepository;
|
import lightcontainer.repository.ClientHandlerRepository;
|
||||||
import lightcontainer.repository.FileFrontEnd;
|
import lightcontainer.repository.FileFrontEnd;
|
||||||
import lightcontainer.repository.ProtocolRepositoryImpl;
|
import lightcontainer.repository.ProtocolRepositoryImpl;
|
||||||
@ -29,6 +34,10 @@ public class App {
|
|||||||
protocolRep.addReader(new HelloRule());
|
protocolRep.addReader(new HelloRule());
|
||||||
protocolRep.addReader(new SigninRule());
|
protocolRep.addReader(new SigninRule());
|
||||||
|
|
||||||
|
protocolRep.addWriter(new SignOk());
|
||||||
|
protocolRep.addWriter(new SignError());
|
||||||
|
|
||||||
|
|
||||||
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);
|
||||||
FileFrontEnd ffe = new FileFrontEnd(clientRep, storeRep, protocolRep);
|
FileFrontEnd ffe = new FileFrontEnd(clientRep, storeRep, protocolRep);
|
||||||
|
@ -3,11 +3,13 @@ package lightcontainer.domains.client;
|
|||||||
import lightcontainer.interfaces.ClientHandlerFFE;
|
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.writer.SignError;
|
||||||
|
import lightcontainer.protocol.rules.writer.SignOk;
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClientHandler
|
* ClientHandler
|
||||||
@ -30,6 +32,12 @@ public class ClientHandler implements Runnable, AutoCloseable {
|
|||||||
private ProtocolRepository protocolRep;
|
private ProtocolRepository protocolRep;
|
||||||
private boolean client_run;
|
private boolean client_run;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Login of client.
|
||||||
|
* State : NULL if not connected and Login string if connected
|
||||||
|
*/
|
||||||
|
private String login;
|
||||||
|
|
||||||
private BufferedReader reader;
|
private BufferedReader reader;
|
||||||
private PrintWriter writer;
|
private PrintWriter writer;
|
||||||
|
|
||||||
@ -82,15 +90,47 @@ public class ClientHandler implements Runnable, AutoCloseable {
|
|||||||
|
|
||||||
ProtocolReader.ProtocolResult ruleResult = protocolRep.executeReader(command + "\r\n");
|
ProtocolReader.ProtocolResult ruleResult = protocolRep.executeReader(command + "\r\n");
|
||||||
|
|
||||||
|
|
||||||
|
if (isConnected()) {
|
||||||
|
|
||||||
if (ruleResult.getReceiver() == ProtocolReader.ResultCmdReceiver.STOREBACKEND) {
|
if (ruleResult.getReceiver() == ProtocolReader.ResultCmdReceiver.STOREBACKEND) {
|
||||||
fileFrontEnd.newCommand(command, ruleResult.getResultCommand()); // Envoie dans la file de tâche FileFrontEnd en attente d'un traitement d'un StorBackEnd
|
fileFrontEnd.newCommand(command, ruleResult.getResultCommand()); // Envoie dans la file de tâche FileFrontEnd en attente d'un traitement d'un StorBackEnd
|
||||||
} else {
|
} else {
|
||||||
writer.write(ruleResult.getResultCommand()); // Renvoye au client
|
writer.write(ruleResult.getResultCommand()); // Renvoye au client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
authentificate(ruleResult);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (IOException ignore) { }
|
} catch (IOException ignore) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void authentificate(ProtocolReader.ProtocolResult ruleResult) {
|
||||||
|
try {
|
||||||
|
SigninRule.Result signinResult = (SigninRule.Result) ruleResult;
|
||||||
|
if (signinResult.checkCredentials()) {
|
||||||
|
this.login = signinResult.getLogin();
|
||||||
|
writer.write(protocolRep.executeWriter(SignOk.NAME));
|
||||||
|
writer.flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (ClassCastException castException) {}
|
||||||
|
|
||||||
|
writer.write(protocolRep.executeWriter(SignError.NAME)); // Envoie SignError car echec de la connection
|
||||||
|
writer.flush();
|
||||||
|
this.close(); // Fermeture de la connection
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Permet de savoir si l'utilisateur s'est connecté (Avec login et mdp)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean isConnected() {
|
||||||
|
return login != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AutoClosable Function
|
* AutoClosable Function
|
||||||
* Close the Client thread and resources.
|
* Close the Client thread and resources.
|
||||||
|
@ -7,7 +7,7 @@ public interface ProtocolRepository {
|
|||||||
|
|
||||||
<T extends ProtocolReader.ProtocolResult> T executeReader(String data);
|
<T extends ProtocolReader.ProtocolResult> T executeReader(String data);
|
||||||
|
|
||||||
String executeWriter(String... datas);
|
String executeWriter(String cmdName, String... datas);
|
||||||
|
|
||||||
void addReader(ProtocolReader reader);
|
void addReader(ProtocolReader reader);
|
||||||
|
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package lightcontainer.protocol.rules.reader;
|
||||||
|
|
||||||
|
import lightcontainer.protocol.ProtocolReader;
|
||||||
|
|
||||||
|
public class SigninRule extends ProtocolReader {
|
||||||
|
|
||||||
|
private static final String PATTERN = "^SIGNIN ([A-Za-z0-9]{2,20}) ([^ !]{5,50})\r\n$";
|
||||||
|
|
||||||
|
// Index du domain dans le tableau de donnée
|
||||||
|
private static final int LOGIN = 0;
|
||||||
|
|
||||||
|
//Index du port dans le tableau de donnée
|
||||||
|
private static final int PASSWORD = 1;
|
||||||
|
|
||||||
|
public SigninRule() {
|
||||||
|
super(PATTERN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class Result extends ProtocolResult {
|
||||||
|
|
||||||
|
private final String login;
|
||||||
|
|
||||||
|
private final String password;
|
||||||
|
|
||||||
|
public Result(String login, String password) {
|
||||||
|
|
||||||
|
this.login = login;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogin() {
|
||||||
|
return login;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkCredentials() {
|
||||||
|
return getLogin().equals("aa") && getPassword().equals("aaaaa");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SigninRule.Result onExecuted(String... data) {
|
||||||
|
SigninRule.Result result = new SigninRule.Result(data[LOGIN], data[PASSWORD]);
|
||||||
|
|
||||||
|
// TODO : Création d'une règle d'écriture SIGN_OK et SIGN_ERROR proprement
|
||||||
|
if (result.checkCredentials()) {
|
||||||
|
result.setResultCommand("SIGN_OK\r\n", ResultCmdReceiver.CLIENT);
|
||||||
|
} else {
|
||||||
|
result.setResultCommand("SIGN_ERROR\r\n", ResultCmdReceiver.CLIENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package lightcontainer.protocol.rules.writer;
|
||||||
|
|
||||||
|
import lightcontainer.protocol.ProtocolWriter;
|
||||||
|
|
||||||
|
public class SignError extends ProtocolWriter {
|
||||||
|
|
||||||
|
private static final String PATTERN = "^SIGN_ERROR\r\n$";
|
||||||
|
|
||||||
|
public static final String NAME = "SIGN_ERROR";
|
||||||
|
|
||||||
|
public SignError() {
|
||||||
|
super(NAME, PATTERN);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package lightcontainer.protocol.rules.writer;
|
||||||
|
|
||||||
|
import lightcontainer.protocol.ProtocolWriter;
|
||||||
|
|
||||||
|
public class SignOk extends ProtocolWriter {
|
||||||
|
|
||||||
|
private static final String PATTERN = "^SIGN_OK\r\n$";
|
||||||
|
|
||||||
|
public static final String NAME = "SIGN_OK";
|
||||||
|
|
||||||
|
public SignOk() {
|
||||||
|
super(NAME, PATTERN);
|
||||||
|
}
|
||||||
|
}
|
@ -23,10 +23,10 @@ public class ProtocolRepositoryImpl implements ProtocolRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String executeWriter(String... data) {
|
public String executeWriter(String cmdName, String... data) {
|
||||||
for (ProtocolWriter writer : writers) {
|
for (ProtocolWriter writer : writers) {
|
||||||
String command = writer.execute(data);
|
String command;
|
||||||
if (command != null) {
|
if (cmdName.equals(writer.getCmdName()) && (command = writer.execute(data)) != null) {
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user