72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"StoreBackEnd/pkg/protocol"
|
|
"bufio"
|
|
)
|
|
|
|
func CreateProtocolRepository() *ProtocolRepository {
|
|
return &ProtocolRepository{
|
|
protocolReaders: make(map[string]*protocol.IProtocolReader),
|
|
protocolWriters: make(map[string]*protocol.IProtocolWriter),
|
|
}
|
|
}
|
|
|
|
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) (*protocol.ProtocolWriterResult, func(reader *bufio.Reader) *protocol.ProtocolWriterResult) {
|
|
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)
|
|
}
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
/*
|
|
ExecuteReader Permet d'exécuter un Wrier et de récupérer la commande construite avec nos argument et un indicateur de réussite.
|
|
*/
|
|
func (repo ProtocolRepository) ExecuteWriter(ruleName string, data ...string) *protocol.ProtocolWriterResult {
|
|
protocolWriter, has := repo.protocolWriters[ruleName]
|
|
if has {
|
|
return (*protocolWriter).Execute(data...)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|