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 }