141 lines
2.6 KiB
Go
141 lines
2.6 KiB
Go
package router
|
|
|
|
import (
|
|
"bytes"
|
|
"devicemanagerb/constants"
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/urfave/negroni"
|
|
)
|
|
|
|
func NewRouter() http.Handler {
|
|
mux := mux.NewRouter()
|
|
// mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
// w.WriteHeader(http.StatusOK)
|
|
// w.Write([]byte("I am devicemanagerB"))
|
|
// })
|
|
|
|
mux.HandleFunc("/{id}", PutStatusChangedHandle).Methods("PUT")
|
|
mux.HandleFunc("/{id}", PostStatusChangedHandle).Methods("POST")
|
|
mux.HandleFunc("/{id}", GetStatusHandle).Methods("GET")
|
|
|
|
n := negroni.Classic()
|
|
n.UseHandler(mux)
|
|
return n
|
|
}
|
|
|
|
// sensing data per device
|
|
var state = map[string]interface{}{}
|
|
|
|
// status from sensor
|
|
func PutStatusChangedHandle(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
_status := map[string]interface{}{}
|
|
decoder := json.NewDecoder(r.Body)
|
|
err := decoder.Decode(&_status)
|
|
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
did, ok := vars["id"]
|
|
if !ok {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
// state[did] = _status
|
|
// log.Println(state[did])
|
|
|
|
_, ok = state[did]
|
|
if !ok {
|
|
state[did] = _status
|
|
}
|
|
|
|
b, err := json.Marshal(state[did])
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
w.Write(b)
|
|
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
w.WriteHeader(http.StatusOK)
|
|
|
|
req, err := http.NewRequest("PUT", "http://"+constants.ServerAddr+":3000/device/"+did, bytes.NewReader(b))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
_, err = http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func GetStatusHandle(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
did, ok := vars["id"]
|
|
if !ok {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
_status, ok := state[did]
|
|
if !ok {
|
|
_status = map[string]interface{}{
|
|
"msg": "hello world",
|
|
}
|
|
}
|
|
|
|
encoder := json.NewEncoder(w)
|
|
|
|
err := encoder.Encode(_status)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
func PostStatusChangedHandle(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
_status := map[string]interface{}{}
|
|
decoder := json.NewDecoder(r.Body)
|
|
err := decoder.Decode(&_status)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
did, ok := vars["id"]
|
|
if !ok {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
state[did] = _status
|
|
log.Println(_status)
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
// status from user per device
|