123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package flowserver
- import (
- "fmt"
- "log"
- "net"
- "net/http"
- "net/http/httputil"
- "net/url"
- "os"
- "github.com/gohxs/prettylog"
- "github.com/gohxs/webu"
- "github.com/gohxs/webu/chain"
- )
- //go:generate go get github.com/gohxs/genversion
- //go:generate genversion -package flowserver -out version.go
- //
- // FlowServer structure
- type FlowServer struct{}
- // ListenAndServe starts the httpserver
- // It will listen on default port 2015 and increase if port is in use
- func (f *FlowServer) ListenAndServe() error {
- fsm := NewFlowSessionManager()
- c := chain.New(webu.ChainLogger(prettylog.New("req")))
- mux := http.NewServeMux()
- mux.Handle("/conn", c.Build(fsm.ServeHTTP))
- if os.Getenv("DEBUG") == "1" {
- log.Println("DEBUG MODE: reverse proxy localhost:8081")
- proxyURL, err := url.Parse("http://localhost:8081")
- if err != nil {
- return err
- }
- mux.Handle("/", c.Build(httputil.NewSingleHostReverseProxy(proxyURL).ServeHTTP))
- } else {
- mux.Handle("/", c.Build(webu.StaticHandler("web", "index.html")))
- }
- ////////////////////
- // Server starter
- /////
- port := 2015
- for {
- addr := fmt.Sprintf(":%d", port)
- s, err := net.Listen("tcp", addr)
- if err != nil {
- log.Println("Listen error:", err)
- port++
- continue
- }
- log.Println("Listening at:", addr)
- err = http.Serve(s, mux)
- if err != nil {
- log.Fatal(err)
- }
- }
- }
|