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
|
// 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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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) {
|
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)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user