2022-02-20 12:35:05 +01:00
|
|
|
package repository
|
|
|
|
|
2022-03-08 12:01:51 +01:00
|
|
|
import (
|
|
|
|
"StoreBackEnd/pkg/protocol"
|
2022-03-08 20:37:49 +01:00
|
|
|
"bufio"
|
2022-03-08 12:01:51 +01:00
|
|
|
)
|
2022-02-20 12:35:05 +01:00
|
|
|
|
2022-02-22 08:29:11 +01:00
|
|
|
func CreateProtocolRepository() *ProtocolRepository {
|
|
|
|
return &ProtocolRepository{
|
|
|
|
protocolReaders: make(map[string]*protocol.IProtocolReader),
|
|
|
|
protocolWriters: make(map[string]*protocol.IProtocolWriter),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-20 12:35:05 +01:00
|
|
|
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é
|
|
|
|
*/
|
2022-03-12 15:57:27 +01:00
|
|
|
func (repo ProtocolRepository) ExecuteReader(data string) (*protocol.ProtocolWriterResult, func(reader *bufio.Reader) *protocol.ProtocolWriterResult) {
|
2022-02-20 12:35:05 +01:00
|
|
|
for _, reader := range repo.protocolReaders {
|
|
|
|
if (*reader).Match(data) { // Exécuter si match
|
|
|
|
// Récupérer résultat à renvoyer (Donc donner ProtocolRepository aux reader ?!)
|
2022-02-22 10:52:07 +01:00
|
|
|
return (*reader).Execute(data)
|
2022-02-20 12:35:05 +01:00
|
|
|
}
|
|
|
|
}
|
2022-03-12 15:57:27 +01:00
|
|
|
return nil, nil
|
2022-02-20 12:35:05 +01:00
|
|
|
}
|
|
|
|
|
2022-02-22 09:35:44 +01:00
|
|
|
/*
|
|
|
|
ExecuteReader Permet d'exécuter un Wrier et de récupérer la commande construite avec nos argument et un indicateur de réussite.
|
|
|
|
*/
|
2022-03-12 15:57:27 +01:00
|
|
|
func (repo ProtocolRepository) ExecuteWriter(ruleName string, data ...string) *protocol.ProtocolWriterResult {
|
2022-03-08 10:25:00 +01:00
|
|
|
protocolWriter, has := repo.protocolWriters[ruleName]
|
2022-02-22 09:35:44 +01:00
|
|
|
if has {
|
2022-03-08 10:25:00 +01:00
|
|
|
return (*protocolWriter).Execute(data...)
|
2022-02-22 09:35:44 +01:00
|
|
|
} else {
|
2022-03-12 15:57:27 +01:00
|
|
|
return nil
|
2022-02-22 09:35:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-20 12:35:05 +01:00
|
|
|
// 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
|
|
|
|
}
|