// API doc: https://wiki.summercamp.local/display/PIN/Pinguin+server+API package main import ( "encoding/json" "battlecamp-go-server/games" "log" "net/http" "runtime" "strconv" "github.com/julienschmidt/httprouter" ) var currentGames games.Games = games.New() func main() { runtime.GOMAXPROCS(runtime.NumCPU()) router := httprouter.New() router.GET("/", showIndex) router.GET("/games", listGames) router.PUT("/games", createGame) router.PUT("/games/:rows/:cols", createGame) router.GET("/games/:gameid", showGame) router.GET("/games/:gameid/:boardid", proxyHandler) //router.GET("/games/:gameid/players", playerListHandler) // TODO: /games/{id}/players/{playerId} router.POST("/games/:gameid/move/:playerId/:direction", movePlayer) log.Fatal(http.ListenAndServe(":8080", router)) } func showIndex(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Write([]byte("Go battlecamp!")) } func proxyHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { if ps.ByName("gameid") == "board" { showBoard(w, r, ps) } else if ps.ByName("boardid") == "join" { joinGame(w, r, ps) } else { listPlayers(w, r, ps) } } func listGames(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header().Set("Content-Type", "text/plain;charset=utf-8") e := json.NewEncoder(w) e.Encode(currentGames.ListGames()) } func createGame(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { xString := ps.ByName("x") yString := ps.ByName("y") var game *games.Game if xString != "" && yString != "" { x, _ := strconv.Atoi(xString) y, _ := strconv.Atoi(yString) game = games.NewGame(x, y) } else { game = games.NewGame(56, 35) } currentGames.AddGame(game) w.WriteHeader(http.StatusCreated) } func joinGame(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { http.Error(w, "joinGame not implemented", http.StatusNotImplemented) } func showGame(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { w.Header().Set("Content-Type", "text/plain;charset=utf-8") http.Error(w, "showGame not implemented", http.StatusNotImplemented) } func listPlayers(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { http.Error(w, "listPlayers not implemented", http.StatusNotImplemented) } func movePlayer(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { http.Error(w, "movePlayer not implemented", http.StatusNotImplemented) } // Request params: x={x}&y={y}&rows={rows}&cols={cols} func showBoard(w http.ResponseWriter, req *http.Request, ps httprouter.Params) { //x, _ := strconv.Atoi(req.FormValue("x")) //y, _ := strconv.Atoi(req.FormValue("y")) //rows, _ := strconv.Atoi(req.FormValue("rows")) //cols, _ := strconv.Atoi(req.FormValue("cols")) }