151 lines
2.8 KiB
Go
151 lines
2.8 KiB
Go
package router
|
|
|
|
import (
|
|
"bytes"
|
|
"devicemanagerb/constants"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"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 s_data = map[string]interface{}{}
|
|
|
|
// status from sensor
|
|
func PutStatusChangedHandle(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
b, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
status := map[string]interface{}{}
|
|
err = json.Unmarshal(b, &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
|
|
}
|
|
|
|
s_data[did] = status
|
|
log.Println(s_data)
|
|
|
|
cdata, ok := c_data[did]
|
|
if !ok {
|
|
w.Write([]byte("I am devicemanagerB"))
|
|
} else {
|
|
encoder := json.NewEncoder(w)
|
|
err := encoder.Encode(cdata)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
}
|
|
|
|
var c_data = map[string]interface{}{}
|
|
|
|
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 := c_data[did]
|
|
if !ok {
|
|
status = map[string]interface{}{
|
|
"servo": 0,
|
|
"fan": 0,
|
|
"light": 0,
|
|
}
|
|
}
|
|
|
|
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)
|
|
|
|
b, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
|
|
status := map[string]interface{}{}
|
|
err = json.Unmarshal(b, &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
|
|
}
|
|
|
|
c_data[did] = status
|
|
log.Println(c_data)
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
// status from user per device
|