diff --git a/cmd/main.go b/cmd/main.go index ae12b33..2807cd8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,22 +1,31 @@ package main import ( + "StorBackEnd/pkg/config" "StorBackEnd/pkg/network" "StorBackEnd/pkg/protocol/managers" "StorBackEnd/pkg/protocol/repository" "StorBackEnd/pkg/protocol/rules/readers" "StorBackEnd/pkg/protocol/rules/writers" + "time" ) const ( - MULTICAST_ADDRESS = "226.66.66.1:42500" - MULTICAST_SECOND = 10 // TODO : Changer en 30 secondes - UNICAST_ADDRESS = "0.0.0.0:58000" + FILE_PATH = "resources/AppConfig.json" ) func main() { println("StorBackEnd started !") + // Loading App config + appConfig, err := config.Read(FILE_PATH) + if err != nil { + println("Impossible de charger la configuration du server : " + err.Error()) + return + } + + println("Adresse multicast : " + appConfig.MulticastAddress) + protocolRepository := repository.CreateProtocolRepository() // Création des Writers @@ -27,12 +36,12 @@ func main() { eraseFileRule := readers.CreateEraseFileRule("^ERASEFILE ([A-Za-z0-9.]{50,200})\r\n$") protocolRepository.AddReader(&eraseFileRule) - multicast := network.CreateClientMulticast(MULTICAST_ADDRESS, MULTICAST_SECOND, protocolRepository) + multicast := network.CreateClientMulticast(appConfig.MulticastAddress, appConfig.Domain, appConfig.UnicastPort, time.Duration(appConfig.MulticastSecond), protocolRepository) go multicast.Run() requestManager := managers.RequestManager{Repository: protocolRepository} - server := network.ServerUnicast{Network: "tcp", Address: UNICAST_ADDRESS, ReqManager: &requestManager} + server := network.ServerUnicast{Network: "tcp", Port: appConfig.UnicastPort, ReqManager: &requestManager} server.Run() } diff --git a/pkg/config/AppConfig.go b/pkg/config/AppConfig.go index 673bc5a..9b5e2e5 100644 --- a/pkg/config/AppConfig.go +++ b/pkg/config/AppConfig.go @@ -2,27 +2,15 @@ package config // AppConfig Contient toute la configuration du server type AppConfig struct { - // multicastAddress Contient l'adresse multicast du FileFrontEnd (adresse:port) - multicastAddress string + // multicastAddress Contient l'adresse multicast du FileFrontEnd + MulticastAddress string `json:"multicastAddress"` // multicastSecond Contient le nombre de seconde entre chaque annonce - multicastSecond int + MulticastSecond int `json:"multicastSecond"` - // unicastAddress Contient l'adresse unicast auquel le FileFrontEnd se connecte (adresse:port) - unicastAddress string -} + // domain Domain du StorBackEnd + Domain string `json:"domain"` -// MulticastAddress Accesseur pour multicastAddress -func (a *AppConfig) MulticastAddress() string { - return a.multicastAddress -} - -// MulticastSecond Accesseur pour multicastSecond -func (a *AppConfig) MulticastSecond() int { - return a.multicastSecond -} - -// UnicastAddress Accesseur pour unicastAddress -func (a *AppConfig) UnicastAddress() string { - return a.unicastAddress + // unicastPort Contient le port unicast auquel le FileFrontEnd se connecte + UnicastPort int `json:"unicastPort"` } diff --git a/pkg/config/JsonConfigReader.go b/pkg/config/JsonConfigReader.go new file mode 100644 index 0000000..1cd3e96 --- /dev/null +++ b/pkg/config/JsonConfigReader.go @@ -0,0 +1,21 @@ +package config + +import ( + "encoding/json" + "io/ioutil" +) + +func Read(filePath string) (*AppConfig, error) { + config := AppConfig{} + file, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + + errJson := json.Unmarshal(file, &config) + if errJson != nil { + return nil, errJson + } + + return &config, nil +} diff --git a/pkg/network/ClientMulticast.go b/pkg/network/ClientMulticast.go index f902bdb..8a26121 100644 --- a/pkg/network/ClientMulticast.go +++ b/pkg/network/ClientMulticast.go @@ -3,14 +3,17 @@ package network import ( "StorBackEnd/pkg/protocol/repository" "StorBackEnd/pkg/protocol/rules/writers" + "fmt" "net" "time" ) // CreateClientMulticast Méthode de construction d'un instance de la stuct ClientMulticast -func CreateClientMulticast(address string, second time.Duration, repository *repository.ProtocolRepository) ClientMulticast { +func CreateClientMulticast(address string, domain string, port int, second time.Duration, repository *repository.ProtocolRepository) ClientMulticast { return ClientMulticast{ address: address, + domain: domain, + port: port, second: second, repository: repository, } @@ -19,9 +22,15 @@ func CreateClientMulticast(address string, second time.Duration, repository *rep // ClientMulticast Cette structure représente une communication en multicast. // TODO : Prévoir une fermeture de la connection (con.Close()) type ClientMulticast struct { - // address Adresse de multicast (address:port) + // address Adresse de multicast address string + // address Domain de du StorBackEnd + domain string + + // port Port de connexion en unicast + port int + // second Temps en seconde entre chaque ping second time.Duration @@ -41,8 +50,7 @@ func (cMult ClientMulticast) Run() { return } - // Fake test - cmd, correct := cMult.repository.ExecuteWriter(writers.HelloRuleName, "benja", "5078") + cmd, correct := cMult.repository.ExecuteWriter(writers.HelloRuleName, cMult.domain, fmt.Sprintf("%d", cMult.port)) if !correct { println("[ClientMulticast] Hello rule isn't correct (" + cmd + ")") return diff --git a/pkg/network/ServerUnicast.go b/pkg/network/ServerUnicast.go index 82e15b8..ecb24ed 100644 --- a/pkg/network/ServerUnicast.go +++ b/pkg/network/ServerUnicast.go @@ -9,13 +9,13 @@ import ( type ServerUnicast struct { Network string - Address string + Port int ReqManager *managers.RequestManager } func (server ServerUnicast) Run() { - listen, err := net.Listen(server.Network, server.Address) // "tcp", "0.0.0.0:58000" + listen, err := net.Listen(server.Network, fmt.Sprintf("0.0.0.0:%d", server.Port)) // "tcp", "0.0.0.0:58000" if err != nil { fmt.Printf("Can't start server : %s\n", err) @@ -36,7 +36,7 @@ func (server ServerUnicast) Run() { } result := server.ReqManager.Execute(line) - con.Write(append([]byte(result), '\n')) + con.Write(append([]byte(result), '\n')) // TODO : ATTENTION laisser les \n } } diff --git a/resources/AppConfig.json b/resources/AppConfig.json new file mode 100644 index 0000000..a25c31e --- /dev/null +++ b/resources/AppConfig.json @@ -0,0 +1,6 @@ +{ + "multicastAddress" : "226.66.66.1:42500", + "multicastSecond" : 10, + "domain" : "benjamin", + "unicastPort" : 58000 +} \ No newline at end of file