55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
|
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
|
||
|
}
|