package main import ( "flag" "fmt" "log" "math/rand" "net/http" "os" "sync" "time" "github.com/gorilla/mux" "riedstra.dev/mitch/steam-export/steam" ) var ( Logger = log.New(os.Stderr, "", log.LstdFlags) Listen = ":8899" libMu = &sync.RWMutex{} Lib *steam.Library ) func reloadLib() { libMu.Lock() defer libMu.Unlock() var err error Lib, err = steam.NewLibrary(DefaultLib) if err != nil { Logger.Printf("Error reopening library: %s", err) return } } func quitHandler(w http.ResponseWriter, r *http.Request) { Logger.Println("Quit was called, exiting") os.Exit(0) } func main() { fl := flag.NewFlagSet("steam-export", flag.ExitOnError) debug := fl.Bool("d", false, "Print line numbers in log") fl.StringVar(&Listen, "l", Listen, "What address do we listen on?") fl.StringVar(&DefaultLib, "L", DefaultLib, "Full path to default library") fl.Parse(os.Args[1:]) if *debug { Logger.SetFlags(log.LstdFlags | log.Llongfile) } var err error Lib, err = steam.NewLibrary(DefaultLib) if err != nil { Logger.Fatalf("While opening library path: %s", err) } go installer(getPath) r := mux.NewRouter() r.HandleFunc("/quit", quitHandler) r.HandleFunc("/delete", gameDelete) r.HandleFunc("/install", gameInstaller) r.HandleFunc("/download/{game}", gameDownloader) r.HandleFunc("/style.css", cssHandler) r.HandleFunc("/", index) s := http.Server{ Handler: r, Addr: Listen, } go startBrowser() for i := 0; i < 5; i++ { err = s.ListenAndServe() if err != nil { Logger.Printf("Encountered: %s", err) rand.Seed(time.Now().UnixNano()) Listen = fmt.Sprintf(":%d", rand.Intn(63000)+1024) Logger.Printf("Trying: %s", Listen) s.Addr = Listen } } }