Skip to content

Commit

Permalink
Merge branch 'master' into brian/arena-tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Nguyen committed May 26, 2018
2 parents 3c6043f + 0e59751 commit a991523
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 20 deletions.
17 changes: 16 additions & 1 deletion server/Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions server/Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
name = "github.com/gorilla/websocket"
version = "1.2.0"

[[constraint]]
name = "github.com/rs/xid"
version = "1.2.0"

[prune]
go-tests = true
unused-packages = true
5 changes: 2 additions & 3 deletions server/arena/arena.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,13 @@ func (a *Arena) GetState() *models.UpdateMessage {
}

// AddPlayer adds a new player to the arena
func (a *Arena) AddPlayer(n string, ws *websocket.Conn) error {
func (a *Arena) AddPlayer(id string, n string, ws *websocket.Conn) error {
color, err := a.generateRandomColor()
if err != nil {
return err
}

position := a.generateCoordinate(models.PlayerRadius)
a.Players[n] = models.CreatePlayer(n, position, color, ws)
a.Players[id] = models.CreatePlayer(id, n, position, color, ws)
return nil
}

Expand Down
31 changes: 16 additions & 15 deletions server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ func (g *Game) ServeHTTP(w http.ResponseWriter, r *http.Request) {
defer ws.Close()

name := r.URL.Query().Get("name")
id := models.GenUniqueID()
for {
var msg models.Message
err := ws.ReadJSON(&msg)
if err != nil {
log.Printf("%v\n", err)
delete(g.Arena.Players, name)
delete(g.Arena.Players, id)
break
}

Expand All @@ -58,15 +59,15 @@ func (g *Game) ServeHTTP(w http.ResponseWriter, r *http.Request) {
continue
}

err := g.Arena.AddPlayer(name, ws)
err := g.Arena.AddPlayer(id, name, ws)
if err != nil {
log.Printf("Error adding player:\n%v", err)
continue
}

initialMsg := models.Message{
Type: "initial",
Data: name,
Data: id,
}
MessageChannel <- initialMsg

Expand All @@ -77,11 +78,11 @@ func (g *Game) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log.Printf("%v\n", err)
continue
}
if _, ok := g.Arena.Players[name]; ok {
if _, ok := g.Arena.Players[id]; ok {
if kh.IsPressed {
g.Arena.Players[name].KeyDownHandler(kh.Key)
g.Arena.Players[id].KeyDownHandler(kh.Key)
} else {
g.Arena.Players[name].KeyUpHandler(kh.Key)
g.Arena.Players[id].KeyUpHandler(kh.Key)
}
}

Expand Down Expand Up @@ -110,13 +111,13 @@ func tick(g *Game) {
}

// update every client
for name := range g.Arena.Players {
p := g.Arena.Players[name]
for id := range g.Arena.Players {
p := g.Arena.Players[id]
err := p.SendJSON(&msg)
if err != nil {
log.Printf("error: %v", err)
p.Close()
delete(g.Arena.Players, name)
delete(g.Arena.Players, id)
}
}
}
Expand All @@ -128,8 +129,8 @@ func messageEmitter(g *Game) {

switch msg.Type {
case "initial":
name := msg.Data.(string)
p := g.Arena.Players[name]
id := msg.Data.(string)
p := g.Arena.Players[id]

initalMsg := models.Message{
Type: "initial",
Expand All @@ -144,23 +145,23 @@ func messageEmitter(g *Game) {
if err != nil {
log.Printf("error: %v", err)
p.Close()
delete(g.Arena.Players, name)
delete(g.Arena.Players, id)
}

case "death":
name := msg.Data.(string)
id := msg.Data.(string)
deathMsg := models.Message{
Type: "death",
Data: nil,
}

p := g.Arena.Players[name]
p := g.Arena.Players[id]
err := p.SendJSON(&deathMsg)
if err != nil {
log.Printf("error: %v", err)
p.Close()
}
delete(g.Arena.Players, name)
delete(g.Arena.Players, id)

default:
log.Println("Unknown message type to emit")
Expand Down
10 changes: 9 additions & 1 deletion server/models/player.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"sync"

"github.com/gorilla/websocket"
"github.com/rs/xid"
)

// Player related constants
Expand Down Expand Up @@ -36,6 +37,7 @@ type KeysPressed struct {
// Player contains data and state about a player's object
type Player struct {
Name string `json:"name"`
ID string `json:"id"`
Position Position `json:"position"`
Velocity Velocity `json:"-"`
Color string `json:"color"`
Expand All @@ -48,9 +50,10 @@ type Player struct {

// CreatePlayer constructs an instance of player with
// given position, color, and WebSocket connection
func CreatePlayer(n string, p Position, c string, ws *websocket.Conn) *Player {
func CreatePlayer(id string, n string, p Position, c string, ws *websocket.Conn) *Player {
return &Player{
Name: n,
ID: id,
Position: p,
Velocity: Velocity{},
Color: c,
Expand All @@ -61,6 +64,11 @@ func CreatePlayer(n string, p Position, c string, ws *websocket.Conn) *Player {
}
}

func GenUniqueID() string {
id := xid.New()
return id.String()
}

// AddPoints adds numPoints to player p
func (p *Player) AddPoints(numPoints int) {
p.Points = p.Points + numPoints
Expand Down

0 comments on commit a991523

Please sign in to comment.