Préparation mécanisme d'exécution d'une command read

This commit is contained in:
Benjamin Lejeune 2022-02-20 12:35:05 +01:00
parent 957e6500a1
commit a8d6197b60
5 changed files with 81 additions and 7 deletions

View File

@ -2,7 +2,12 @@ package protocol
// IProtocolReader Représentation abstraite d'un protocol // IProtocolReader Représentation abstraite d'un protocol
type IProtocolReader interface { type IProtocolReader interface {
// Permet de récupérer le nom de la commande
GetCmd() string
// Permet d'exécuter l'action implémentée par une règle
Execute(data string) string
// Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol // Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol
Execute(data string) Match(data string) bool
} }

View File

@ -2,6 +2,8 @@ package protocol
// IProtocolReader Représentation abstraite d'un protocol // IProtocolReader Représentation abstraite d'un protocol
type IProtocolWriter interface { type IProtocolWriter interface {
// Permet de récupérer le nom de la commande
GetCmd() string
// Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol // Permet de vérifier la validité d'une donnée censée suivre les règles d'un protocol
Execute(argsData []string) Execute(argsData []string)

View File

@ -1,10 +1,20 @@
package protocol package protocol
import "_StorBackEnd/pkg/protocol/repository"
type RequestManager struct { type RequestManager struct {
repository repository.ProtocolRepository
} }
func (receiver RequestManager) Execute(request string) { func (receiver RequestManager) Execute(request string) string {
// On lis ce que l'on reçoit // On lis ce que l'on reçoit
result, executed := receiver.repository.ExecuteReader(request)
// On renvoie la réponse (Comment pour fichier ?) // On renvoie la réponse (Comment pour fichier ?)
if executed {
return result
} else {
// TODO : Renvoyer qu'une erreur est survenue
return "Error occured while execute command"
}
} }

View File

@ -0,0 +1,54 @@
package repository
import (
"_StorBackEnd/pkg/protocol"
)
type ProtocolRepository struct {
protocolReaders map[string]*protocol.IProtocolReader
protocolWriters map[string]*protocol.IProtocolWriter
}
// AddReader Permet d'ajouter une règle servant à lire une commande
func (repo ProtocolRepository) AddReader(reader *protocol.IProtocolReader) {
cmd := (*reader).GetCmd()
if cmd != "" && !repo.containsReader(cmd) {
repo.protocolReaders[cmd] = reader
}
}
// AddWriter Permet d'ajouter une règle servant à construire une commande
func (repo ProtocolRepository) AddWriter(writer *protocol.IProtocolWriter) {
cmd := (*writer).GetCmd()
if cmd != "" && !repo.containsWriter(cmd) {
repo.protocolWriters[cmd] = writer
}
}
/*
ExecuteReader Permet d'exécuter un Reader et de récupérer la commande à renvoyer. La deuxième valeur de retour permet de savoir si une commande a put être exécuté
*/
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 "", false
}
// containsReader Permet de vérifier si le reader est déjà contenu
func (repo ProtocolRepository) containsReader(cmd string) bool {
_, has := repo.protocolReaders[cmd]
return has
}
// containsReader Permet de vérifier si le writer est déjà contenu
func (repo ProtocolRepository) containsWriter(cmd string) bool {
_, has := repo.protocolWriters[cmd]
return has
}

View File

@ -20,12 +20,15 @@ func CreateEraseFileRule(cmd string, pattern string) *EraseFileRule {
} }
} }
func (rule EraseFileRule) execute(data string) { func (rule EraseFileRule) Execute(data string) string {
matcher := rule.matcher
if matcher.Match(data) { if rule.Match(data) {
println("EraseFileRule data is matching") return "Parsing : EraseFileRule command fichier supprimé"
} else { } else {
println("EraseFileRule data isn't matching") return "Parsing : EraseFileRule command fichier non-supprimé"
} }
} }
func (rule EraseFileRule) Match(data string) bool {
return rule.matcher.Match(data)
}