diff --git a/app/server.go b/app/server.go index ce238a1e58b154ce9b31635e28c46e2ca172c54e..e6e1c1de6923ccb3c55a2686e2b5864c3b58a095 100644 --- a/app/server.go +++ b/app/server.go @@ -3,9 +3,14 @@ package main import ( "fmt" "gopkg.in/yaml.v3" + "net" + "node/connection" + object_storage "node/object-storage" . "node/types" "node/utilities" "os" + "strconv" + "sync" ) /** @@ -16,6 +21,33 @@ import ( * @version 1.3 */ +func listenForConnections(serverConfig Config, objectStorage Blob, addressToListenOn string, amIRoot bool) { + port := strconv.FormatInt(int64(serverConfig.Port), 10) + completeAddress := addressToListenOn + ":" + port + + server, err := net.Listen("tcp", completeAddress) + if err != nil { + fmt.Println("Error while creating the server :", err) + os.Exit(1) + } + + fmt.Println("Server is ready to accept connections") + fmt.Println("listening on ", completeAddress) + + ServerReady = true + + var mu sync.Mutex + for { + // Listening for connections + conn, err := server.Accept() + if err != nil { + fmt.Println("Error accepting: ", err.Error()) + } else { + go connection.ProcessClient(conn, server, serverConfig, amIRoot, &mu) + } + } +} + func main() { argsLen := len(os.Args) isThereEnoughArgs := argsLen <= 1 @@ -36,13 +68,13 @@ func main() { os.Exit(1) } - var c Config - err = yaml.Unmarshal(buf, &c) + var serverConfig Config + err = yaml.Unmarshal(buf, &serverConfig) if err != nil { os.Exit(1) } - utilities.PrintConfig(c) + utilities.PrintConfig(serverConfig) amIRoot := argsLen == 3 if amIRoot { @@ -55,5 +87,13 @@ func main() { } fmt.Println("Launching server loop") + addressToListenOn := "0.0.0.0" + + azureCreds := object_storage.InitAzureCredentials("hepiadistributedsystems") + blobName := "blockchain" + "-" + "database" + "" + strconv.Itoa(serverConfig.ID) + objectStorage := object_storage.InitializeBlobFromObjectStorageCreds(blobName, azureCreds) + + go listenForConnections(serverConfig, objectStorage, addressToListenOn, amIRoot) + fmt.Println("Launching user input command line") }