github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume3/section1/intermediate/server.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "encoding/gob" 6 "flag" 7 "fmt" 8 "io/ioutil" 9 "log" 10 "net/http" 11 12 "github.com/gorilla/websocket" 13 14 "github.com/EngineerKamesh/gofullstack/volume3/section1/intermediate/model" 15 ) 16 17 var addr = flag.String("addr", "localhost:8080", "http service address") 18 19 var upgrader = websocket.Upgrader{} 20 21 func echo(w http.ResponseWriter, r *http.Request) { 22 c, err := upgrader.Upgrade(w, r, nil) 23 if err != nil { 24 log.Print("upgrade:", err) 25 return 26 } 27 defer c.Close() 28 for { 29 mt, message, err := c.ReadMessage() 30 if err != nil { 31 log.Println("read:", err) 32 break 33 } 34 log.Printf("recv: %s", message) 35 err = c.WriteMessage(mt, message) 36 if err != nil { 37 log.Println("write:", err) 38 break 39 } 40 } 41 } 42 43 func handleCarsData(w http.ResponseWriter, r *http.Request) { 44 45 var cars []model.Car 46 var carsDataBuffer bytes.Buffer 47 48 dec := gob.NewDecoder(&carsDataBuffer) 49 body, err := ioutil.ReadAll(r.Body) 50 carsDataBuffer = *bytes.NewBuffer(body) 51 err = dec.Decode(&cars) 52 53 w.Header().Set("Content-Type", "text/plain") 54 55 if err != nil { 56 log.Println(err) 57 w.Write([]byte("Something went wrong, look into it")) 58 59 } else { 60 fmt.Printf("Cars Data: %#v\n", cars) 61 w.Write([]byte("Thanks, I got the slice of cars you sent me!")) 62 } 63 64 } 65 66 func main() { 67 fs := http.FileServer(http.Dir("./static")) 68 flag.Parse() 69 log.SetFlags(0) 70 http.HandleFunc("/echo", echo) 71 http.HandleFunc("/cars-data", handleCarsData) 72 http.Handle("/", fs) 73 74 log.Fatal(http.ListenAndServe(*addr, nil)) 75 }