Commit fc2377c

Richard Luby <richluby@gmail.com>
2016-10-28 07:21:32
server now handles GET and POST
server can determine action based on whether wishes to GET a test or POST a test
1 parent 3fd8301
client.go
@@ -49,7 +49,7 @@ func getRecordFromServer(client *http.Client, config CONFIG, numQuestions int) (
 	default:
 		serverURL = "http://" + config.SERVER + ":" + strconv.Itoa(config.PORT)
 	}
-	resp, err := client.Get(serverURL + "/record?questions=" + strconv.Itoa(numQuestions))
+	resp, err := client.Get(serverURL + API_ROOT + "/test" + "?questions=" + strconv.Itoa(numQuestions))
 	if err != nil {
 		return nil, err
 	}
serverHandlers.go
@@ -8,14 +8,8 @@ import (
 	"strconv"
 )
 
-type ServerHandler struct {
-	Request        string
-	HandleFunction func(writer http.ResponseWriter, request *http.Request)
-}
-
-// HandleConnections processes client connections
-func handleRecordRequests(writer http.ResponseWriter, request *http.Request) {
-	log.Printf("Client Connected: %+v\tvia %+v", request.RemoteAddr, request.UserAgent())
+// handleRequestForTest provides a JSON formatted test for the client
+func handleRequestForTest(writer http.ResponseWriter, request *http.Request) {
 	var giveRecords []Record
 	var err error
 	questions := request.FormValue("questions")
@@ -31,7 +25,32 @@ func handleRecordRequests(writer http.ResponseWriter, request *http.Request) {
 	log.Printf("Gave %d questions to %s", numQuestions, request.RemoteAddr)
 }
 
-var handlers = []ServerHandler{
-	ServerHandler{
-		Request:        "/record",
-		HandleFunction: handleRecordRequests}}
+// handleTestRequests creates an array of records for the client
+// the requestion expects 1 parameter (numQuestions)
+func handleTestQueries(writer http.ResponseWriter, request *http.Request) {
+	if request.URL.Path != handlers[API_ROOT+"/test"].Request {
+		return
+	}
+	switch request.Method {
+	case "POST":
+		log.Printf("Client posting test: %+v\tvia %+v", request.RemoteAddr, request.UserAgent())
+	case "GET":
+		log.Printf("Client requested test: %+v\tvia %+v", request.RemoteAddr, request.UserAgent())
+		handleRequestForTest(writer, request)
+	}
+}
+
+type ServerHandler struct {
+	Request        string
+	HandleFunction func(writer http.ResponseWriter, request *http.Request)
+}
+
+var handlers map[string]ServerHandler
+
+func init() {
+	handlers = map[string]ServerHandler{
+		API_ROOT + "/test": ServerHandler{
+			Request:        API_ROOT + "/test",
+			HandleFunction: handleTestQueries}}
+
+}
structures.go
@@ -1,5 +1,8 @@
 package main
 
+// API_ROOT defines the root path for the web api interface
+const API_ROOT = "/api"
+
 // EXIT_CODES define exit error codes
 type EXIT_CODES struct {
 	BAD_CONFIG,