Préparation mécanisme d'exécution d'une command read
This commit is contained in:
parent
957e6500a1
commit
a8d6197b60
@ -2,7 +2,12 @@ package protocol
|
||||
|
||||
// IProtocolReader Représentation abstraite d'un protocol
|
||||
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
|
||||
Execute(data string)
|
||||
Match(data string) bool
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package protocol
|
||||
|
||||
// IProtocolReader Représentation abstraite d'un protocol
|
||||
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
|
||||
Execute(argsData []string)
|
||||
|
@ -1,10 +1,20 @@
|
||||
package protocol
|
||||
|
||||
import "_StorBackEnd/pkg/protocol/repository"
|
||||
|
||||
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
|
||||
result, executed := receiver.repository.ExecuteReader(request)
|
||||
|
||||
// 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"
|
||||
}
|
||||
}
|
||||
|
54
pkg/protocol/repository/ProtocolRepository.go
Normal file
54
pkg/protocol/repository/ProtocolRepository.go
Normal 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
|
||||
}
|
@ -20,12 +20,15 @@ func CreateEraseFileRule(cmd string, pattern string) *EraseFileRule {
|
||||
}
|
||||
}
|
||||
|
||||
func (rule EraseFileRule) execute(data string) {
|
||||
matcher := rule.matcher
|
||||
func (rule EraseFileRule) Execute(data string) string {
|
||||
|
||||
if matcher.Match(data) {
|
||||
println("EraseFileRule data is matching")
|
||||
if rule.Match(data) {
|
||||
return "Parsing : EraseFileRule command fichier supprimé"
|
||||
} 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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user