package main import ( "code.google.com/p/go.net/websocket" "flag" "fmt" "log" "math/rand" "net/http" "time" ) var addr = flag.String("addr", ":8666", "http service address") var velocity = flag.Float64("velocity", 30, "") var tick = flag.Int("tick", 33, "") var weapon_radius = flag.Int("weapon_radius", 35, "") var verbose = flag.Bool("verbose", false, "") var width = flag.Float64("width", 800, "width of field") var height = flag.Float64("height", 550, "height of field") var delta float64 var g *game func main() { rand.Seed(time.Now().UnixNano()) flag.Parse() delta = float64(*tick) / 1000 http.Handle("/ws/", websocket.Handler(addPlayer)) g = NewGame() go g.run() err := http.ListenAndServe(*addr, nil) if err != nil { log.Fatal("unable to start server") } } func addPlayer(ws *websocket.Conn) { id := fmt.Sprintf("robot%d", <-g.id) conf, err := Negociate(ws, id, *width, *height) if err != nil { websocket.JSON.Send(ws, NewFailure(err.Error())) } if conf != nil { p := &player{ Robot: robot{ Stats: conf.Stats, Id: id, Health: conf.Stats.Hp, Scanners: make([]scanner, 0)}, send: make(chan *boardstate), ws: ws, } p.reset() g.register <- p defer func() { g.unregister <- p }() go p.sender() p.recv() log.Printf("%v has been disconnect from this game\n", p.Robot.Id) } else { s := &Spectator{ send: make(chan *boardstate), ws: ws, } g.sregister <- s defer func() { g.sunregister <- s }() s.sender() log.Printf("%+v has been disconnect from this game\n", s) } }