mmg/handlers.go

99 lines
1.8 KiB
Go
Raw Normal View History

2013-05-08 22:57:52 -07:00
package main
import (
"encoding/json"
"fmt"
"log"
"math/rand"
2013-05-08 22:57:52 -07:00
"net/http"
"strconv"
2013-05-08 22:57:52 -07:00
)
2013-05-08 23:21:18 -07:00
type prob struct {
Operation string
First int
Second int
Score int
}
type solution struct {
Status bool
Score int
2013-05-08 23:21:18 -07:00
}
2013-05-08 23:41:59 -07:00
type JsonHandler func(http.ResponseWriter, *http.Request)
func (h JsonHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "application/json")
h(w, req)
2013-05-08 23:41:59 -07:00
}
2013-05-08 23:21:42 -07:00
func problem(w http.ResponseWriter, req *http.Request) {
operation := "+"
if r := rand.Intn(2); r == 0 {
operation = "-"
}
2013-05-08 23:21:18 -07:00
first := rand.Intn(MAX)
var second int
if operation == "-" {
if first == 0 {
second = 0
} else {
second = rand.Intn(first)
}
} else {
second = rand.Intn(MAX)
}
r := prob{operation, first, second, 66}
2013-05-08 23:21:18 -07:00
b, err := json.Marshal(r)
if err != nil {
log.Fatal("issue with json marshalling", err)
}
2013-05-08 23:21:18 -07:00
j := string(b)
fmt.Println("problem", j)
fmt.Fprintf(w, j)
2013-05-08 22:57:52 -07:00
}
2013-05-08 23:21:42 -07:00
func attempt(w http.ResponseWriter, req *http.Request) {
first, err := strconv.Atoi(req.FormValue("first"))
if err != nil {
log.Fatal("cannot parse first", err)
}
operation := req.FormValue("operation")
second, err := strconv.Atoi(req.FormValue("second"))
if err != nil {
log.Fatal("cannot parse second", err)
}
var guess int
answer := req.FormValue("answer")
if answer == "" {
guess = 0
} else {
guess, err = strconv.Atoi(answer)
if err != nil {
log.Fatal("cannot parser answer", err)
}
}
if err != nil {
log.Fatal("cannot parse answer", err)
}
var result bool
if operation == "+" {
result = first+second == guess
} else if operation == "-" {
result = first-second == guess
}
b, err := json.Marshal(solution{result, 66})
if err != nil {
log.Fatal("cannot marshal solution", err)
}
j := string(b)
fmt.Println("attempt", j)
fmt.Fprintf(w, j)
2013-05-08 22:57:52 -07:00
}