simple-web-game/game.go

40 lines
672 B
Go
Raw Normal View History

2013-06-16 00:00:25 -07:00
package main
type game struct {
players map[*player]bool
broadcast chan *player
register chan *player
unregister chan *player
}
var g = game{
broadcast: make(chan *player),
register: make(chan *player),
unregister: make(chan *player),
players: make(map[*player]bool),
}
func (g *game) run() {
for {
select {
case c := <-g.register:
g.players[c] = true
case c := <-g.unregister:
delete(g.players, c)
close(c.send)
case p := <-g.broadcast:
for c := range g.players {
if p != c {
select {
case c.send <- p:
default:
delete(g.players, c)
close(c.send)
go c.ws.Close()
}
}
}
}
}
}