YealinkRemote/main.go

148 lines
3.7 KiB
Go

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
}
*/