Browse Source

Remove waitgroups, add support for -d key

-d 'partner_ip:port' now working
main
Дмитрий 3 years ago
parent
commit
88815db466
  1. 4
      src/client_server/server.go
  2. 17
      src/client_server/validators.go
  3. 51
      src/main.go

4
src/client_server/server.go

@ -3,11 +3,9 @@ package clientserver
import (
"fmt"
"net/http"
"sync"
)
func StartServer(port string, wg *sync.WaitGroup) {
defer wg.Done()
func StartServer(port string) {
http.HandleFunc("/placements/request", handleRequest)

17
src/client_server/validators.go

@ -1,9 +1,13 @@
package clientserver
import (
"errors"
"fmt"
"log"
"net/http"
"regexp"
"strconv"
"strings"
)
// Returns false if ipv4 `correct`.
@ -19,3 +23,16 @@ func throwHTTPError(err_text string, code int, w *http.ResponseWriter) {
http.Error(*w, err_text, code)
log.Printf("Error %d %v\n", code, err_text)
}
func ParsePartnersAddress(ipAndPort string) (string, int64, error) {
var err error
iap := strings.Split(ipAndPort, ":")
ip := iap[0]
if wrongIPAddresFormat(ip) {
err = errors.New(fmt.Sprintf("Wrong ip address format in partner ip: %v", ip))
}
port, _ := strconv.ParseInt(iap[1], 10, 32)
return ip, port, err
}

51
src/main.go

@ -18,37 +18,48 @@ import (
"flag"
"log"
clientserver "sample-choose-ad/src/client_server"
"sync"
// req_types "sample-choose-ad/src/requests_types"
customtypes "sample-choose-ad/src/custom_types"
"strings"
)
// ============
var partners []customtypes.PartnersAddress
func main() {
var wg sync.WaitGroup
log.Println("Starting server")
/*
file := flag.String("f", "", "path to file")
port := flag.String("p", "5050", "listening port")
flag.Parse()
if *file == "" {
fmt.Println("Please specify the path to the file!")
return
}
*/
port := flag.String("p", "", "-p 5050")
addressesList := flag.String("d", "", "-d '10.10.10.10:5050,10.10.10.20:5050'")
flag.Parse()
if *port == "" {
log.Println("Port number is require!")
return
log.Fatalln("Error: Port number is require!")
}
if *addressesList == "" {
log.Fatalln("Error: Partners list is require!")
}
// Parse first 10 ip:port pairs into `[]partners` slise
for i, p := range strings.Split(*addressesList, ",") {
if i == 10 {
log.Println("Warning: Partners count must be less or equal 10!")
return
}
ip, port, err := clientserver.ParsePartnersAddress(p)
if err != nil {
log.Println(err)
continue
}
partners = append(partners, customtypes.PartnersAddress{
Ip: ip,
Port: port})
}
wg.Add(1)
go clientserver.StartServer(*port, &wg)
wg.Wait()
clientserver.StartServer(*port, partners)
}

Loading…
Cancel
Save