package routers import ( "encoding/json" "io/ioutil" "log" "main/models" "main/utils" "net/http" "strconv" "github.com/gorilla/mux" "github.com/gorilla/websocket" ) var manager = models.NewWebSocketManager() func ModelsGet(w http.ResponseWriter, r *http.Request) { var listview models.ListView listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 10) listview.List = models.QueryModels(listview.Page, listview.PageSize) listview.Total = models.CountModels() listview.Next = listview.Page*listview.PageSize < listview.Total w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(listview.ToJSON()) } func ModelsPost(w http.ResponseWriter, r *http.Request) { var model models.Model body, err := ioutil.ReadAll(r.Body) if err != nil { log.Println(err) return } defer r.Body.Close() if err = json.Unmarshal(body, &model); err != nil { log.Println(err) return } model.Create() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(model)) } func ModelItemGet(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Upgrade") == "websocket" { vars := mux.Vars(r) id, _ := strconv.Atoi(vars["id"]) model := models.QueryModel(id) if model.ID == 0 { w.WriteHeader(http.StatusNotFound) return } upgrader := websocket.Upgrader{} conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() wsid := manager.AddConnection(conn) defer manager.RemoveConnection(wsid) for { _, msg, err := conn.ReadMessage() if err != nil { log.Println(err) return } log.Println(string(msg)) if string(msg) == "close" { break } } return } model := models.Model{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} model.Get() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(model)) } func ModelItemPatch(w http.ResponseWriter, r *http.Request) { var model models.Model body, err := ioutil.ReadAll(r.Body) if err != nil { log.Println(err) return } defer r.Body.Close() if err = json.Unmarshal(body, &model); err != nil { log.Println(err) return } model.ID = utils.ParamInt(mux.Vars(r)["id"], 0) model.Update() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(model)) } func ModelItemDelete(w http.ResponseWriter, r *http.Request) { model := models.Model{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} model.Delete() w.WriteHeader(http.StatusNoContent) }