package cmpSnipper import ( "net" "net/http" ) type tcpKeepAliveListener struct { *net.TCPListener } type cmpSnipperHttpServ struct { HttpListener net.Listener } func (app *App) HttpServStart() error { var err error; // var subjHttpPortString string = "7070"; // var subjHttpPortUint16 uint16 = subjConf.Http.Port; host, err := app.ConfGetStr("http", "host") // fmt.Printf("Success load : %+v\n", host) if err != nil { app.Log(err) return err } port, err := app.ConfGetStr("http", "port") // fmt.Printf("Success load : %+v\n", port) if err != nil { app.Log(err) return err } // if subjHttpPortUint16 == 0 || subjHttpPortString != strconv.FormatUint(uint64(subjHttpPortUint16), 10) { // fmt.Printf("Invalid http.port %s != %d\n", subjHttpPortString, subjHttpPortUint16) // app.Log(".Fatal"); // } httpFileServer := http.FileServer(http.Dir("static")) http.Handle("/go-prefix/static/", http.StripPrefix("/go-prefix/static/", httpFileServer)) http.HandleFunc("/" , app.HttpReq); http.HandleFunc("/go-prefix/ws" , app.HttpWebSockHand) var addr = host + ":" + port server := &http.Server{Addr: addr} app.Log("Listenning: '%s'", port); app.cmpSnipperHttpServ.HttpListener, err = net.Listen("tcp", addr) // defer app.HttpServClose() if err != nil { app.Log(err) return err } go func() { err = server.Serve(tcpKeepAliveListener{app.cmpSnipperHttpServ.HttpListener.(*net.TCPListener)}) if err == nil { app.Log(err) return // err } }() return nil } func (app *App) HttpServStop() { app.cmpSnipperHttpServ.HttpListener.Close() app.Log("Server Closed") }