func TokenizeHandler(t tokenizer.Tokenizer) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { s := req.URL.Query().Get(":string") log.Println("RESTful Tokenize:", s) token, err := t.Tokenize(s) if err != nil { http.Error(w, err.Error(), 500) } fmt.Fprint(w, token) } }
func Tokenize(t tokenizer.Tokenizer) wsHandler { return func(ws *websocket.Conn) { log.Println("New websocket connection") log.Println(" Location: ", ws.Config().Location) log.Println(" Origin: ", ws.Config().Origin) log.Println(" Protocol: ", ws.Config().Protocol) dec := json.NewDecoder(ws) enc := json.NewEncoder(ws) for { var err error var request JsonTokenizeRequest // Read one request from the socket and attempt to decode switch err = dec.Decode(&request); true { case err == io.EOF: log.Println("Websocket disconnecting") return case err != nil: // Request could not be decoded - return error response := TokenizeReponse{Status: invalidRequest, Error: err.Error()} enc.Encode(&response) log.Println("Invalid request - websocket disconnecting") return } data := make(map[string]string) for fieldname, text := range request.Data { data[fieldname], err = t.Tokenize(text) if err != nil { // TODO: Do something nicer with this error? log.Panic(err) } } response := TokenizeReponse{ ReqId: request.ReqId, Status: success, Data: data, } enc.Encode(response) } } }