package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "os" "path" "path/filepath" "github.com/gorilla/mux" "github.com/surgemq/surgemq/service" ) var StartUpPath string // our main function func main() { // StartupPath auslesen dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } StartUpPath = dir fmt.Println("-----------------------------------------------") fmt.Println("Escape Room 0.3") fmt.Println("-----------------------------------------------") fmt.Println("Webserver: http://*:8000") fmt.Println("MQTT-Server: tcp://*:1833") fmt.Println("Websocket-Server: http://*:8081") fmt.Println("-----------------------------------------------") fmt.Println("Admin-Seite: http://127.0.0.1:8000/admin.html") fmt.Println("-----------------------------------------------") fmt.Println("") // Create a new mqtt server svr := &service.Server{ KeepAlive: 300, // seconds ConnectTimeout: 2, // seconds SessionsProvider: "mem", // keeps sessions in memory Authenticator: "mockSuccess", // always succeed TopicsProvider: "mem", // keeps topic subscriptions in memory } // Websocket addr := "tcp://:1883" AddWebsocketHandler("/mqtt", addr) go ListenAndServeWebsocket(":8081") // Listen and serve connections at localhost:1883 go svr.ListenAndServe("tcp://:1883") router := mux.NewRouter() //router.HandleFunc("/api/folder", GetFolderContent).Methods("GET") router.HandleFunc("/api/folder/{foldername:.*}", GetFolderContent).Methods("GET") //router.HandleFunc("/api/image/{imagename:.*}", GetImage).Methods("GET") //------------------------------------------- router.HandleFunc("/api/sendkey/{ip}/{key}", GetSendKey).Methods("GET") //------------------------------------------- router.PathPrefix("/").Handler(http.FileServer(http.Dir("./web"))).Methods("GET") log.Fatal(http.ListenAndServe(":8000", router)) } func GetSendKey(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) pIP := params["ip"] pKey := params["key"] resp, err := http.Get("http://admin:admin@" + pIP + "/servlet?key=" + pKey) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) json.NewEncoder(w).Encode(body) } func GetFolderContent(w http.ResponseWriter, r *http.Request) { // http://127.0.0.1:8000/api/folder/1080_stahlwerke params := mux.Vars(r) pFolder := params["foldername"] fmt.Println(path.Join(StartUpPath, "web", pFolder)) files, err := ioutil.ReadDir(path.Join(StartUpPath, "web", pFolder)) if err != nil { log.Fatal(err) } var dateien []string for _, f := range files { dateien = append(dateien, f.Name()) } json.NewEncoder(w).Encode(dateien) } func isDir(name string) bool { var ret bool fi, err := os.Stat(name) if err != nil { panic(err) } if fi.IsDir() { ret = true } else { ret = false } return ret } /* func GetMem(w http.ResponseWriter, r *http.Request) { var m runtime.MemStats runtime.ReadMemStats(&m) log.Printf("\nAlloc = %v\nTotalAlloc = %v\nSys = %v\nNumGC = %v\n\n", m.Alloc/1024, m.TotalAlloc/1024, m.Sys/1024, m.NumGC) json.NewEncoder(w).Encode(m) PrintMemUsage() } func PrintMemUsage() { var m runtime.MemStats runtime.ReadMemStats(&m) // For info on each, see: https://golang.org/pkg/runtime/#MemStats fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc)) fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc)) fmt.Printf("\tSys = %v MiB", bToMb(m.Sys)) fmt.Printf("\tNumGC = %v\n", m.NumGC) } func bToMb(b uint64) uint64 { return b / 1024 / 1024 } */