package main import ( "flag" "log" "math/rand" "net/http" _ "net/http/pprof" "os" "runtime/pprof" "time" "bitbucket.org/hackerbots/server" "golang.org/x/net/websocket" ) var addr = flag.String("addr", ":8666", "http service address") var profile = flag.String("pprof", "", "if specified will run with pprof") var mprofile = flag.String("mprof", "", "if specified will dump a memory profile") var netprofile = flag.Bool("netprof", false, "if specified will run with net/http/pprof on :8667") var verbose = flag.Bool("verbose", false, "") var config = flag.String("config", "~/.config/hackerbots/server.json", "location of config file") func main() { log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) log.Printf("Starting Server...") var err error rand.Seed(time.Now().UnixNano()) flag.Parse() if *profile != "" { f, err := os.Create(*profile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) } if *netprofile { go func() { log.Println(http.ListenAndServe("localhost:8667", nil)) }() log.Println("serving profile info at http://localhost:8667/debug/pprof/") } conf, err := server.LoadConfig(*config) if err != nil { log.Fatal(err) } sm := http.NewServeMux() c := server.NewController(conf, *mprofile, *profile) go c.Run() sm.Handle("/", server.JsonHandler(c.Index)) sm.Handle("/ws/", websocket.Handler(c.AddPlayer)) sm.Handle("/game/start/", server.JsonHandler(c.StartGame)) sm.Handle("/game/list/", server.JsonHandler(c.ListGames)) sm.Handle("/game/stats/", server.JsonHandler(c.GameStats)) sm.Handle("/game/bw/", server.JsonHandler(c.BW)) sm.Handle("/game/stop/", server.JsonHandler(c.StopGame)) sm.HandleFunc("/fuck/shit/up/", c.KillServer) err = http.ListenAndServe(*addr, sm) if err != nil { log.Fatal("unable to start server") } }