elma_developer_test/main.go

87 lines
1.5 KiB
Go

package main
import (
"bytes"
"fmt"
"gotest/solutions"
"log"
"net/http"
"strings"
"sync"
)
func main() {
http.HandleFunc("/task/", Handler)
http.HandleFunc("/tasks/", Handler)
fmt.Println("Engage!")
err := http.ListenAndServe(solutions.Port, nil)
if err != nil {
panic(err)
}
}
func Handler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/tasks/" {
var answers = make([][]byte, 4)
var err error
var wg sync.WaitGroup //ждёмс рутины
wg.Add(4)
go func() {
defer wg.Done()
answers[0], err = solutions.ProcessTask(solutions.Rotation)
if err != nil {
log.Fatalln(err)
}
}()
go func() {
defer wg.Done()
answers[1], err = solutions.ProcessTask(solutions.FindUnique)
if err != nil {
log.Fatalln(err)
}
}()
go func() {
defer wg.Done()
answers[2], err = solutions.ProcessTask(solutions.Cons)
if err != nil {
log.Fatalln(err)
}
}()
go func() {
defer wg.Done()
answers[3], err = solutions.ProcessTask(solutions.Missing)
if err != nil {
log.Fatalln(err)
}
}()
wg.Wait()
w.Write(bytes.Join(answers, []byte{}))
} else {
taskName := strings.Split(r.URL.Path, "/")
//fmt.Println(taskName[2])
if taskName[1] == "tasks" {
w.WriteHeader(400)
w.Write([]byte(fmt.Sprintf("400 Bad Request - %s", r.URL.Path)))
}
if taskName[1] == "task" {
answer, err := solutions.ProcessTask(taskName[2])
if err != nil {
log.Fatalln(err)
}
w.Write(answer)
}
}
}