StoreBackEnd/pkg/protocol/repository/ProtocolRepository.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
}