Tranformation d'une commande (chaine de char) en tableau. Il est donc désormais possible de lire une commande et l'interprêter

This commit is contained in:
Benjamin Lejeune 2022-02-22 10:52:07 +01:00
parent 09d4834cdf
commit 233f7ac582
5 changed files with 16 additions and 9 deletions

View File

@ -20,11 +20,11 @@ func main() {
protocolRepository := repository.CreateProtocolRepository()
// Création des Writers
helloRule := writers.CreateHelloRule("^(HELLO) ([A-Za-z0-9]{5,20}) ([0-9]{1,5})\r\n$")
helloRule := writers.CreateHelloRule("^HELLO ([A-Za-z0-9]{5,20}) ([0-9]{1,5})\r\n$")
protocolRepository.AddWriter(&helloRule)
// Création des Readers
eraseFileRule := readers.CreateEraseFileRule("^(ERASEFILE) ([A-Za-z0-9.]{50,200})\r\n$")
eraseFileRule := readers.CreateEraseFileRule("^ERASEFILE ([A-Za-z0-9.]{50,200})\r\n$")
protocolRepository.AddReader(&eraseFileRule)
multicast := network.CreateClientMulticast(MULTICAST_ADDRESS, MULTICAST_SECOND, protocolRepository)

View File

@ -5,8 +5,8 @@ type IProtocolReader interface {
// GetCmd Permet de récupérer le nom de la commande
GetCmd() string
// Execute Permet d'exécuter l'action implémentée par une règle
Execute(data string) string
// Execute Permet d'exécuter l'action implémentée par une règle. Retourne le message (rule) de retour et bool pour savoir si tout s'est bien passé ou non
Execute(data string) (string, bool)
// Match Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol
Match(data string) bool

View File

@ -38,3 +38,8 @@ func (m RegexMatcher) Build(cmd string, datas ...string) (string, bool) {
return "", false
}
}
// Parse Permet de récupérer les différentes données de la chaine sur base du regex
func (m RegexMatcher) Parse(data string) []string {
return m.matcher.FindAllStringSubmatch(data, -1)[0]
}

View File

@ -39,7 +39,7 @@ func (repo ProtocolRepository) ExecuteReader(data string) (string, bool) {
for _, reader := range repo.protocolReaders {
if (*reader).Match(data) { // Exécuter si match
// Récupérer résultat à renvoyer (Donc donner ProtocolRepository aux reader ?!)
return (*reader).Execute(data), true
return (*reader).Execute(data)
}
}

View File

@ -15,7 +15,7 @@ type EraseFileRule struct {
}
// CreateEraseFileRule Création d'une instance de EraseFileRule
func CreateEraseFileRule(pattern string) *EraseFileRule {
func CreateEraseFileRule(pattern string) protocol.IProtocolReader {
return &EraseFileRule{
Cmd: EraseFileRuleName,
matcher: protocol.CreateRegexMatcher(pattern),
@ -26,12 +26,14 @@ func (rule EraseFileRule) GetCmd() string {
return rule.Cmd
}
func (rule EraseFileRule) Execute(data string) string {
func (rule EraseFileRule) Execute(data string) (string, bool) {
if rule.Match(data) {
return "Parsing : EraseFileRule command fichier supprimé"
values := rule.matcher.Parse(data)
println(values[1], " est le hash du fichier à supprimer")
return "Parsing : Fichier avec le hash " + values[1] + " supprimé", true
} else {
return "Parsing : EraseFileRule command fichier non-supprimé"
return "Parsing : EraseFileRule command incorrecte", false
}
}