// Copyright (C) 2024 Pagefault Games - All Rights Reserved // https://github.com/pagefaultgames package main import ( "encoding/gob" "flag" "log" "net" "net/http" "os" "github.com/pagefaultgames/rogueserver/api" "github.com/pagefaultgames/rogueserver/db" ) func main() { // flag stuff debug := flag.Bool("debug", false, "use debug mode") proto := flag.String("proto", "tcp", "protocol for api to use (tcp, unix)") addr := flag.String("addr", "0.0.0.0", "network address for api to listen on") dbuser := flag.String("dbuser", "pokerogue", "database username") dbpass := flag.String("dbpass", "", "database password") dbproto := flag.String("dbproto", "tcp", "protocol for database connection") dbaddr := flag.String("dbaddr", "localhost", "database address") dbname := flag.String("dbname", "pokeroguedb", "database name") flag.Parse() // register gob types gob.Register([]interface{}{}) gob.Register(map[string]interface{}{}) // get database connection err := db.Init(*dbuser, *dbpass, *dbproto, *dbaddr, *dbname) if err != nil { log.Fatalf("failed to initialize database: %s", err) } // create listener listener, err := createListener(*proto, *addr) if err != nil { log.Fatalf("failed to create net listener: %s", err) } mux := http.NewServeMux() // init api api.Init(mux) // start web server if *debug { err = http.Serve(listener, debugHandler(mux)) } else { err = http.Serve(listener, mux) } if err != nil { log.Fatalf("failed to create http server or server errored: %s", err) } } func createListener(proto, addr string) (net.Listener, error) { if proto == "unix" { os.Remove(addr) } listener, err := net.Listen(proto, addr) if err != nil { return nil, err } if proto == "unix" { os.Chmod(addr, 0777) } return listener, nil } func debugHandler(router *http.ServeMux) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Headers", "*") w.Header().Set("Access-Control-Allow-Methods", "*") w.Header().Set("Access-Control-Allow-Origin", "*") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusOK) return } router.ServeHTTP(w, r) }) }