- package main
-
- import (
- "flag"
- "log"
- "math/rand"
- "net/http"
- _ "net/http/pprof"
- "os"
- "runtime/pprof"
- "time"
-
- "code.google.com/p/go.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/config.json", "location of config file")
-
- var delta float32
-
- var idg *IdGenerator
- var conf Config
-
- // This is the main, global collection of games
- var games MapLock
-
- 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/")
- }
-
- games = MapLock{m: make(map[string]*game)}
- idg = NewIdGenerator()
-
- conf, err = loadConfig(*config)
- if err != nil {
- log.Fatal(err)
- }
-
- delta = (float32(conf.Tick) / 1000.0) * float32(conf.Timescale)
-
- sm := http.NewServeMux()
-
- sm.Handle("/", JsonHandler(index))
- sm.Handle("/ws/", websocket.Handler(addPlayer))
- sm.Handle("/game/start/", JsonHandler(startGame))
- sm.Handle("/game/list/", JsonHandler(listGames))
- sm.Handle("/game/stats/", JsonHandler(gameStats))
- sm.Handle("/game/bw/", JsonHandler(bw))
- sm.Handle("/game/stop/", JsonHandler(stopGame))
- sm.HandleFunc("/fuck/shit/up/", killServer)
-
- err = http.ListenAndServe(*addr, sm)
- if err != nil {
- log.Fatal("unable to start server")
- }
- }
|