Pārlūkot izejas kodu

Fixed gameId bug in game started event

Ronald Peterson 10 gadi atpakaļ
vecāks
revīzija
7deb5c2fda
1 mainītis faili ar 25 papildinājumiem un 12 dzēšanām
  1. 25 12
      games/gameserver.go

+ 25 - 12
games/gameserver.go

@@ -7,12 +7,17 @@ import (
 )
 
 type GameServer struct {
-	addGameChan   chan *Game
-	listGamesChan chan Chan
+	addGameChan   chan addGameChan
+	listGamesChan chan gamesChan
 	getGameChan   chan getGame
 }
 
-type Chan chan []*Game
+type addGameChan struct {
+	game *Game
+	id chan int64
+}
+
+type gamesChan chan []*Game
 
 type getGame struct {
 	id         int64
@@ -22,8 +27,8 @@ type getGame struct {
 func New() GameServer {
 
 	gameServer := GameServer{
-		addGameChan:   make(chan *Game),
-		listGamesChan: make(chan Chan),
+		addGameChan:   make(chan addGameChan),
+		listGamesChan: make(chan gamesChan),
 		getGameChan:   make(chan getGame),
 	}
 
@@ -37,10 +42,11 @@ func serveGames(gameServer GameServer) {
 
 	for {
 		select {
-		case game := <-gameServer.addGameChan:
-			game.Id = gameCounter
+		case addGameChan := <-gameServer.addGameChan:
+			addGameChan.game.Id = gameCounter
 			gameCounter++
-			gamesMap[game.Id] = game
+			gamesMap[addGameChan.game.Id] = addGameChan.game
+			addGameChan.id <- addGameChan.game.Id
 		case r := <-gameServer.listGamesChan:
 			v := make([]*Game, 0, len(gamesMap))
 			for _, value := range gamesMap {
@@ -59,15 +65,22 @@ type stompGameStart struct {
 }
 
 func (games GameServer) AddGame(x, y int, stompConnection *extStomp.Conn) *Game {
-	game := NewGame(x, y)
-	games.addGameChan <- game
+	game2 := NewGame(x, y)
+	addGame := addGameChan{
+		game: game2,
+		id: make(chan int64),
+	}
+	
+	games.addGameChan <- addGame
+	gameId := <- addGame.id
+	
 	stompGameStart := stompGameStart{
 		Type:   "GAME_START",
-		GameId: game.Id,
+		GameId: gameId,
 	}
 	b, _ := json.Marshal(stompGameStart)
 	stompConnection.Send("/topic/go-battlecamp.game", "application/json;charset=utf-8", b, extStomp.SendOpt.NoContentLength)
-	return game
+	return game2
 }
 
 func (games GameServer) ListGames() []*Game {