2022-09-16 13:48:36 +03:00
|
|
|
package main
|
|
|
|
|
2022-11-30 02:00:20 +03:00
|
|
|
import (
|
2022-12-01 13:47:37 +03:00
|
|
|
"bytes"
|
2022-11-30 02:00:20 +03:00
|
|
|
"fmt"
|
|
|
|
"gotest/solutions"
|
2022-12-01 13:47:37 +03:00
|
|
|
"log"
|
2022-11-30 02:00:20 +03:00
|
|
|
"net/http"
|
2022-12-01 13:47:37 +03:00
|
|
|
"strings"
|
|
|
|
"sync"
|
2022-11-30 02:00:20 +03:00
|
|
|
)
|
2022-09-30 23:35:21 +03:00
|
|
|
|
2022-11-29 22:04:09 +03:00
|
|
|
func main() {
|
2022-12-01 04:24:53 +03:00
|
|
|
http.HandleFunc("/task/", Handler)
|
|
|
|
http.HandleFunc("/tasks/", Handler)
|
2022-12-01 04:16:09 +03:00
|
|
|
fmt.Println("Engage!")
|
2022-11-30 02:00:20 +03:00
|
|
|
err := http.ListenAndServe(solutions.Port, nil)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2022-09-16 13:48:36 +03:00
|
|
|
}
|
2022-12-01 04:24:53 +03:00
|
|
|
|
|
|
|
func Handler(w http.ResponseWriter, r *http.Request) {
|
2022-12-01 13:47:37 +03:00
|
|
|
|
|
|
|
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])
|
2022-12-01 16:21:19 +03:00
|
|
|
if taskName[1] == "tasks" {
|
|
|
|
w.WriteHeader(400)
|
|
|
|
w.Write([]byte(fmt.Sprintf("400 Bad Request - %s", r.URL.Path)))
|
2022-12-01 13:47:37 +03:00
|
|
|
}
|
|
|
|
|
2022-12-01 16:21:19 +03:00
|
|
|
if taskName[1] == "task" {
|
|
|
|
answer, err := solutions.ProcessTask(taskName[2])
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
w.Write(answer)
|
|
|
|
}
|
2022-12-01 13:47:37 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-12-01 04:24:53 +03:00
|
|
|
}
|