From 233f7ac5823afce94d80f2fd07f633e007550ec1 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Tue, 22 Feb 2022 10:52:07 +0100 Subject: [PATCH] =?UTF-8?q?Tranformation=20d'une=20commande=20(chaine=20de?= =?UTF-8?q?=20char)=20en=20tableau.=20Il=20est=20donc=20d=C3=A9sormais=20p?= =?UTF-8?q?ossible=20de=20lire=20une=20commande=20et=20l'interpr=C3=AAter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/main.go | 4 ++-- pkg/protocol/IProtocolReader.go | 4 ++-- pkg/protocol/RegexMatcher.go | 5 +++++ pkg/protocol/repository/ProtocolRepository.go | 2 +- pkg/protocol/rules/readers/EraseFileRule.go | 10 ++++++---- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 5649993..ef8b308 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -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) diff --git a/pkg/protocol/IProtocolReader.go b/pkg/protocol/IProtocolReader.go index 65ad140..26b0ea4 100644 --- a/pkg/protocol/IProtocolReader.go +++ b/pkg/protocol/IProtocolReader.go @@ -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 diff --git a/pkg/protocol/RegexMatcher.go b/pkg/protocol/RegexMatcher.go index 6c78dc2..517be7e 100644 --- a/pkg/protocol/RegexMatcher.go +++ b/pkg/protocol/RegexMatcher.go @@ -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] +} diff --git a/pkg/protocol/repository/ProtocolRepository.go b/pkg/protocol/repository/ProtocolRepository.go index 14202b5..1901ece 100644 --- a/pkg/protocol/repository/ProtocolRepository.go +++ b/pkg/protocol/repository/ProtocolRepository.go @@ -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) } } diff --git a/pkg/protocol/rules/readers/EraseFileRule.go b/pkg/protocol/rules/readers/EraseFileRule.go index bbb04e4..d3e3522 100644 --- a/pkg/protocol/rules/readers/EraseFileRule.go +++ b/pkg/protocol/rules/readers/EraseFileRule.go @@ -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 } }