ETRI_SMARTFARM_POC/router/route.go

93 lines
2.3 KiB
Go

package router
import (
"encoding/json"
"etrismartfarmpoc/model"
"net/http"
"strings"
"github.com/gorilla/mux"
"github.com/urfave/negroni"
)
type Notification struct {
Msg string `json:"msg"`
}
var db model.DBHandler
func init() {
var err error
db, err = model.NewDBHandler("postgres", "dump.db")
if err != nil {
panic(err)
}
}
// var rd *render.Render = render.New()
func NewRouter() http.Handler {
mux := mux.NewRouter()
mux.HandleFunc("/noti", GetNotification).Methods("GET")
mux.HandleFunc("/controllers", GetControllerList).Methods("GET")
mux.HandleFunc("/controllers", PostController).Methods("POST")
mux.HandleFunc("/services", GetServices).Methods("GET")
mux.HandleFunc("/services", PostService).Methods("POST")
mux.HandleFunc("/services", PutServices).Methods("PUT")
mux.HandleFunc("/devices", PostDevice).Methods("POST")
mux.HandleFunc("/devices", GetDevices).Methods("GET")
mux.HandleFunc("/devices", DeleteDevice).Methods("DELETE")
mux.HandleFunc("/devices", PutDevice).Methods("PUT", "OPTIONS")
mux.HandleFunc("/device/{id}", GetDeviceWatch).Methods("GET")
mux.HandleFunc("/device/{id}", PutDeviceStatus).Methods("PUT")
mux.HandleFunc("/discover", GetDiscoveredDevices).Methods("GET")
mux.PathPrefix("/services/").HandlerFunc(RouteRequestToService)
n := negroni.Classic() // 파일 서버 및 로그기능을 제공함
n.UseHandler(mux)
return n
}
func EchoRoute(w http.ResponseWriter, r *http.Request) {
// w.Write([]byte(r.RequestURI))
// token := strings.Split(r.RequestURI, "/")
l := len([]rune("/services/"))
idx := strings.Index(r.RequestURI[l:], "/")
id := r.RequestURI[l : l+idx]
url := r.RequestURI[l+idx:]
m := make(map[string]string)
m["id"] = id
m["url"] = url
encoder := json.NewEncoder(w)
encoder.Encode(m)
}
// func GetDiscoveredDevices(w http.ResponseWriter, r *http.Request) {
// noti := make(chan string, 1)
// mutex.Lock()
// discoveredNotifications = append(discoveredNotifications, noti)
// mutex.Unlock()
// conn, err := upgrader.Upgrade(w, r, nil)
// if err != nil {
// w.WriteHeader(http.StatusBadRequest)
// w.Write([]byte(err.Error()))
// return
// }
// for {
// <-noti
// // fmt.Println("Write!!", discoveredDevices)
// if conn.WriteJSON(discoveredDevices) != nil {
// log.Println(err)
// return
// }
// }
// }
// func mapService(urls []string) {
// }