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() protocolRepository := repository.CreateProtocolRepository()
// Création des Writers // 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) protocolRepository.AddWriter(&helloRule)
// Création des Readers // 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) protocolRepository.AddReader(&eraseFileRule)
multicast := network.CreateClientMulticast(MULTICAST_ADDRESS, MULTICAST_SECOND, protocolRepository) 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 Permet de récupérer le nom de la commande
GetCmd() string GetCmd() string
// Execute Permet d'exécuter l'action implémentée par une règle // 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 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 Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol
Match(data string) bool Match(data string) bool

View File

@ -38,3 +38,8 @@ func (m RegexMatcher) Build(cmd string, datas ...string) (string, bool) {
return "", false 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 { for _, reader := range repo.protocolReaders {
if (*reader).Match(data) { // Exécuter si match if (*reader).Match(data) { // Exécuter si match
// Récupérer résultat à renvoyer (Donc donner ProtocolRepository aux reader ?!) // 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 // CreateEraseFileRule Création d'une instance de EraseFileRule
func CreateEraseFileRule(pattern string) *EraseFileRule { func CreateEraseFileRule(pattern string) protocol.IProtocolReader {
return &EraseFileRule{ return &EraseFileRule{
Cmd: EraseFileRuleName, Cmd: EraseFileRuleName,
matcher: protocol.CreateRegexMatcher(pattern), matcher: protocol.CreateRegexMatcher(pattern),
@ -26,12 +26,14 @@ func (rule EraseFileRule) GetCmd() string {
return rule.Cmd return rule.Cmd
} }
func (rule EraseFileRule) Execute(data string) string { func (rule EraseFileRule) Execute(data string) (string, bool) {
if rule.Match(data) { 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 { } else {
return "Parsing : EraseFileRule command fichier non-supprimé" return "Parsing : EraseFileRule command incorrecte", false
} }
} }