Merge branch 'dev' into maximilien

# Conflicts:
#	cmd/main.go
#	pkg/network/ClientMulticast.go
This commit is contained in:
Maximilien LEDOUX 2022-02-26 18:11:05 +01:00
commit 6cc3922347
6 changed files with 63 additions and 31 deletions

View File

@ -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()
}

View File

@ -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"`
}

View File

@ -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
}

View File

@ -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

View File

@ -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
}
}

6
resources/AppConfig.json Normal file
View File

@ -0,0 +1,6 @@
{
"multicastAddress" : "226.66.66.1:42500",
"multicastSecond" : 10,
"domain" : "benjamin",
"unicastPort" : 58000
}